static function getUserPermissions($user_groups) { $model = new cmsModel(); $model->filterIn('group_id', $user_groups); $model->select('r.name', 'rule_name'); $model->select('r.type', 'rule_type'); $model->select('r.options', 'rule_options'); $model->join('perms_rules', 'r', 'r.id = i.rule_id'); $items = $model->get('perms_users', false, false); if (!$items) { return false; } $values = array(); foreach ($items as $item) { // // Для правил, которые являются списками важен порядок опций // Здесь мы проверяем, что более приоритетная опция не была // уже присвоена ранее // Такое может быть, если пользователь состоит в нескольких // группах, тогда будет браться самая приоритетная из всех // доступных опций (значений) этого правила // if ($item['rule_type'] == 'list') { $rule_options = explode(',', $item['rule_options']); if (isset($values[$item['subject']][$item['rule_name']])) { $current_value = $values[$item['subject']][$item['rule_name']]; $current_priority = array_search($current_value, $rule_options); $next_priority = array_search($item['value'], $rule_options); if ($current_priority >= $next_priority) { continue; } } } $values[$item['subject']][$item['rule_name']] = $item['value']; } return $values; }