PHP 控制和合并来自多个用户组的所有角色。一用户多用户组,一用户组多角色

问题描述 投票:0回答:1

我需要创建一个函数,可以合并用户组中的所有角色,以便一个用户可以访问所有给定的角色。

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 也可以访问其他组角色

php
1个回答
0
投票

您有一个 GetRoles 函数,可以根据用户的主要组和附加组向用户分配角色。但是,目前仅考虑主要组中的角色,这通过忽略其他组中的角色来限制用户访问。

要解决此问题,您需要:

合并所有组(主要组和附加组)中的角色,以创建可访问角色的唯一列表,并更新 GetAccess 函数以迭代所有组而不仅仅是主要组。

© www.soinside.com 2019 - 2024. All rights reserved.