Fix #955 exclude inaccessible modules from integration search

This commit is contained in:
Kijin Sung 2017-12-06 14:04:36 +09:00
parent f0ad692650
commit fbd9af16a9
3 changed files with 101 additions and 27 deletions

View file

@ -2185,6 +2185,49 @@ class moduleModel extends module
return $__cache = $grant;
}
/**
* Get the list of modules that the member can access.
*
* @param object $member_info
* @return array
*/
function getAccessibleModuleList($member_info = null)
{
if(!$member_info)
{
$member_info = Context::get('logged_info');
}
$result = Rhymix\Framework\Cache::get(sprintf('site_and_module:accessible_modules:%d', $member_info->member_srl));
if($result === null)
{
$mid_list = $this->getMidList();
$result = array();
foreach($mid_list as $module_info)
{
$grant = $this->getGrant($module_info, $member_info);
if(!$grant->access)
{
continue;
}
foreach(array('list', 'view') as $require_grant)
{
if(isset($grant->{$require_grant}) && $grant->{$require_grant} === false)
{
continue 2;
}
}
$result[$module_info->module_srl] = $module_info;
}
ksort($result);
Rhymix\Framework\Cache::set(sprintf('site_and_module:accessible_modules:%d', $member_info->member_srl), $result);
}
return $result;
}
/**
* Get privileges(granted) information of the member for target module by target_srl
* @param string $target_srl as module_srl. It may be a reference serial number