我需要创建一个函数,可以合并用户组中的所有角色,以便一个用户可以访问所有给定的角色。
public function GetRoles($id = 'new', $module = null) {
$json = [];
$groups = array_merge((array) ($this->auth['payload']['group'] ?? null), (array) ($this->auth['payload']['additionalGroup'] ?? null));
$access = GetAccess($module ?? $this->module, $groups);
$json['insert'] = ($id === 'new' && in_array('insert', $access)) ? true : null;
$json['view'] = ($id === 'view' && in_array('view', $access)) ? true : null;
$json['update'] = ($id !== 'new' && in_array('update', $access)) ? true : null;
$json['delete'] = ($id !== 'new' && in_array('delete', $access)) ? true : null;
$json['upload'] = ($id !== 'new' && in_array('upload', $access)) ? true : null;
$json['remove'] = ($id !== 'new' && in_array('remove', $access)) ? true : null;
$json['inactive'] = ($id !== 'new' && in_array('inactive', $access)) ? true : null;
$json['approve'] = ($id !== 'new' && in_array('approve', $access)) ? true : null;
$json['cancel'] = ($id !== 'new' && in_array('cancel', $access)) ? true : null;
$json['reopen'] = ($id !== 'new' && in_array('reopen', $access)) ? true : null;
return $json;
}
function GetAccess($module, $groups, $role = null) {
global $config;
$rules = [];
$modules = ModuleMerge($config['modules']);
if (isset($config['access'][$module])) {
foreach ($config['access'][$module] ?? [] as $key => $value) {
if (in_array($key, $groups)) {
$rules = array_unique(array_merge($rules, $value));
}
}
} else if (in_array($module, ['main', 'login', 'login_google', 'register', 'reset', 'newpassword', 'validate', 'contact_us', 'disclaimer', 'privacy_policy', 'security_policy', 'terms_condition', 'help'])) {
$rules = ['view', 'insert', 'update'];
} else {
$rules = $modules[$module];
}
if ($role) {
$rules = in_array($role, $rules);
}
return $rules;
}
function ModuleMerge($array) {
$result = [];
for ($i = 0; $i < count($array); $i++) {
$moduleKey = $array[$i]['module'] ?? null;
if (!isset($result[$moduleKey])) {
$result[$moduleKey] = [];
}
$result[$moduleKey] = $result[$moduleKey]
? array_unique(array_merge($result[$moduleKey], $array[$i]['roles'] ?? []))
: ($array[$i]['roles'] ?? []);
if (is_array($array[$i]['children'] ?? null)) {
$result = array_merge($result, ModuleMerge($array[$i]['children']));
}
}
return $result;
}
用户1
主要组 -> ['员工']
附加组 -> ['商店管理'、'商品'、'库存 SV']
群组员工角色 -> ['查看主仪表板'、'编辑个人资料'、'上传个人资料图片']
群组商店管理员角色 -> ['查看商店模块页面'、'添加商店项目'、'更新商店项目'、'删除商店项目'、'批准商店项目']
商品角色分组 -> ['查看商品库存', '插入商品收件人']
目前用户1只能访问主组,附加组弹窗访问被拒绝!
我希望用户 1 也可以访问其他组角色
您有一个 GetRoles 函数,可以根据用户的主要组和附加组向用户分配角色。但是,目前仅考虑主要组中的角色,这通过忽略其他组中的角色来限制用户访问。
要解决此问题,您需要:
合并所有组(主要组和附加组)中的角色,以创建可访问角色的唯一列表,并更新 GetAccess 函数以迭代所有组而不仅仅是主要组。