senman/yii2-rbac-manager

yii2的RBAC,基于角色的权限控制,扁平结构,容许一个用户有一个或多个角色的灵活配置,含菜单等等,支持多个子系统公用一个权限管理。

dev-master 2018-09-05 03:41 UTC

This package is auto-updated.

Last update: 2024-09-15 21:48:05 UTC


README

yii2的RBAC,基于角色的权限控制,扁平结构,容许一个用户有一个或多个角色的灵活配置,含菜单等等,支持多个子系统公用一个权限管理。

一、安装:

composer require senman/yii2-rbac-manager dev-master

二、导入数据库

导入vender/senman/yii2-rbac-manager/Rbac.sql

三、配置参数 在config/params.php里添加配置参数

return [
    //权限配置
    'rbac_manager' => [
        "user_model" => "\\common\\models\\User",//用户模型地址
        "role_model" => "\\common\\models\\Role",//角色模型地址
        "rule_model" => "\\common\\models\\Rule",//规则模型地址
        "system_model" => "\\common\\models\\System",//系统模型地址
        "role_rule_model" => "\\common\\models\\RoleRule",//角色规则模型地址
        "user_role_model" => "\\common\\models\\UserRole",//用户角色模型地址

        "super_admin_id" => [585, 576, 575],//管理员用户的id
        "base_role_id" => "35",//配置基本角色的ID
        //该状态为规则、用户、角色、系统的状态
        "status" => [
            "status_disable" => 0,//禁用
            "status_active" => 1,//启用
        ],
        //不需要权限校验的路由
        "except_route" => [
            "rule/menus",
        ],
    ]
];

四、判断是否具有权限

\Rbac\models\UserRole::hasAuth($user_id, $pathInfo = null, $module_id="", $system_id=1);

五、常用方法

角色相关:

获取角色模型的主键ID

Role::getRolePrimaryKey();

根据条件修改角色

$condition为条件数组,例如

['role_id'=>1,'name'=>'test']

$data为需要修改的数据,例如

['sort'=>100]

Role::updateByCondition($condition, $data);

根据角色ID进行修改

$role_id 为角色ID

$data为需要修改的数据,例如

['sort'=>100]

Role::updateByRoleId($role_id, $data);

根据角色ID条件进行删除

Role::deleteByRoleId($role_id)

根据条件进行删除

$condition为条件数组,例如

['role_id'=>1,'name'=>'test']

Role::deleteByCondition($condition)

获取该角色下的所有节点名

$role_id为角色ID

$field 角色表字段名,默认为:name,即路由地址

$status 状态值,0:为启用状态,默认只获取正常启用状态的角色

$system_id 系统ID,属于哪个子系统

Role::getAccessByRoleId($role_id, $field = "name", $status = 0, $system_id)

通过角色ID获取角色信息

$role_id 角色ID

$fields 获取的字段,默认为所有,示例:

['role_id','name']

Role::getRoleById($role_id, $fields = "*")

通过条件进行获取角色

$condition为条件数组,例如

['role_id'=>1,'name'=>'test']

$fields 获取的字段,默认为所有,示例:

['role_id','name']

Role::getRoleByCondition($condition, $fields = "*")

添加角色

$data为需要添加的数据,示例:

[
'system_id'=>1, 'name'=>'test', 'status'=>0, 'remark'=>'备注',
];

Role::add($data);

根据条件获取带分页的角色列表

$page 页码,默认为0

$limit 每一页条数,默认为20

$condition 条件数组,默认为空

Role::listOfPagin($page, $limit = 20, $condition=[]);

给角色授权相关:

通过用户ID获取所有权限

$user_id 用户ID

$system_id 子系统ID

该方法返回该用户在该系统ID下的所有规则路由name

RoleRule::getAccess($user_id, $system_id);

根据条件进行删除

RoleRule::deleteByCondition($condition = array());

判断是否为超管,注意该超管是写死在配置文件中的,可供调试所用

RoleRule::is_super_admin($user_id);

判断是否认证通过

$pathInfo为需要判断的路由地址,若为null则取当前路由

$module_id为版本id,例如:http:://www.monqin.com/v1/user/info

则其中的V1为版本id,若无此版本控制,可直接为空

$system_id 子系统ID

返回值参考:

400:已授权

401:该用户未找到

402:该用户状态异常

403:该用户已被删除

404:授权异常

405:权限不足

406:该系统已经被禁用

RoleRule::auth($user_id, $pathInfo = null, $module_id = "", $system_id);

判断是否有权限

$pathInfo为需要判断的路由地址,若为null则取当前路由

$module_id为版本id,例如:http:://www.monqin.com/v1/user/info

则其中的V1为版本id,若无此版本控制,可直接为空

$system_id 子系统ID

返回为布尔值

RoleRule::hasAuth($user_id, $pathInfo = null, $module_id, $system_id);

为角色分配权限

$role_id 需要分配权限的角色ID

$rule_id_arr 规则节点ID数组

RoleRule::access($role_id, array $rule_id_arr);

规则相关:

根据ID 获取规则信息

$rule_id 规则ID

$fields 获取的字段,默认为所有,示例:

['rule_id','name']

Rule::getRuleById($rule_id, $fields = "*");

根据rule_id删除数据

Rule::deleteByRuleId($rule_id);

获取规则节点树型数据结构

$type 类型,当type=0时$id为角色ID,否则为用户ID

$id 角色或用ID,具体类型取决于$type

$menu_show 是否是菜单,0:不是菜单,1:菜单,为null时为所有

$status 规则节点状态,0:启用,1:不启用,当为null时为所有

$pid 树顶id,若是获取整个树则为0,否则需要填入树顶点ID

$fields 获取的字段,默认为null,只获取所需要的字段:

['system_id', 'rule_id', 'pid', 'name', 'title', 'href', 'icon', 'status', 'menu_show', 'sort']

$is_fifter 是否过滤掉无权限的节点,1:过滤,0:不过滤

$module_id $module_id为版本id,例如:http:://www.monqin.com/v1/user/info,则其中的V1为版本id,若无此版本控制,可直接为空

$sort 排序,1:降序,0:升序

$system_id 子系统ID

Rule::getRulesTree($id, $type = 0, $menu_show = null, $status = null, $pid = 0, $fields = null, $is_fifter = 0, $module_id='', $sort = 1, $system_id)

根据规则ID获取其下所有节点id数组

Rule::getSonByRuleId($rule_id);

通过rule_id获取所有到顶点的ID

Rule::getRootByRuleId($rule_id)

新增规则节点

$data为需要添加的数据,示例:

$data=[ 'system_id'=>1, 'name'=>'rule/add', //后台执行的路由,必填
'title'=>'权限管理', //规则节点的标题,必填
'href'=>'链接地址', //前台链接地址,非必填
'pid'=>'0', //上级ID
'status'=>0, //状态,0:启用,1:禁用
'remark'=>'备注', //非必填
'sort'=>'0',//排序,非必填
'menu_show'=>'0',//是否显示菜单,0:不显示,1:显示
'icon'=>'0',//菜单图标 非必填
]

Rule::add($data)

获取规则节点的分页列表

$page 页码,默认为0

$limit 每一页条数,默认为20

$system_id 子系统ID,为null时则获取所有系统的规则节点

Rule::listOfPagin($page, $limit = 20, $system_id = null)

获取用户菜单

$user_id 用户ID 必填

$system_id 系统ID 必填

Rule::getMenus($user_id, $system_id, $sort = 1, $pid = 0, $module_id = "", $menu_show = 1, $status = 0, $is_fifter = 1, $fields = null)

用户相关:

判断用户是否有效

User::is_valid($user_id)

根据id获取用户信息

User::getUserById($userId, $fields = ['*'])

通过用户ID获取所有权限节点名称数组

User::getAccessByUserId($user_id, $status=0, $system_id)

通过用户ID获取子系统所有所属角色的ID列表

User::getRolesByUserId($user_id, $system_id)

获取用户的分页列表

$keywords 查询的关键词,提供username和real_name的模糊查找

User::listOfPagin($page, $limit = 20, $sort = 1, $keywords = NULL)

用户-角色相关:

给用户分配一个角色

$user_id 用户ID

$role_id 角色ID

UserRole::setRoleByUserId($user_id, $role_id)

为没有配置角色的用户配置一个基本角色

调用此方法需在配置项里配置参数base_role_id的值,该值为你需要指定的一个角色ID

UserRole::setBasicRole($user_id)

为用户批量分配角色

$user_id 用户ID

$role_id_arr 角色ID 数组

$system_id 系统ID 必填

UserRole::setUserRole($user_id, $role_id_arr, $system_id)

根据用户id查询到用户所有的角色信息

$user_id 用户ID

$fields 获取字段的数组,选填

$system_id 系统ID,当获取子系统的该用户对应的角色时则传实际的系统ID;当传NULL时,则获取所有的系统的角色

UserRole::getUserRoleByUserId($user_id, $system_id = NULL, $fields = ['*'])

六、如有任何疑问欢迎加入QQ群:338461207 进行交流

if you have any questions, welcome to join QQ group: 338461207