yii2-rbac-manager
yii2的RBAC,基于角色的权限控制,扁平结构,容许一个用户有一个或多个角色的灵活配置,含菜单等等,支持多个子系统公用一个权限管理。, (*1)
一、安装:, (*2)
composer require senman/yii2-rbac-manager dev-master, (*3)
二、导入数据库, (*4)
导入vender/senman/yii2-rbac-manager/Rbac.sql, (*5)
三、配置参数
在config/params.php里添加配置参数, (*6)
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",
],
]
];
四、判断是否具有权限, (*7)
\Rbac\models\UserRole::hasAuth($user_id, $pathInfo = null, $module_id="", $system_id=1);
五、常用方法, (*8)
角色相关:, (*9)
获取角色模型的主键ID, (*10)
Role::getRolePrimaryKey();, (*11)
根据条件修改角色, (*12)
$condition为条件数组,例如, (*13)
['role_id'=>1,'name'=>'test'], (*14)
$data为需要修改的数据,例如, (*15)
['sort'=>100], (*16)
Role::updateByCondition($condition, $data);, (*17)
根据角色ID进行修改, (*18)
$role_id 为角色ID, (*19)
$data为需要修改的数据,例如, (*20)
['sort'=>100], (*21)
Role::updateByRoleId($role_id, $data);, (*22)
根据角色ID条件进行删除, (*23)
Role::deleteByRoleId($role_id), (*24)
根据条件进行删除, (*25)
$condition为条件数组,例如, (*26)
['role_id'=>1,'name'=>'test'], (*27)
Role::deleteByCondition($condition), (*28)
获取该角色下的所有节点名, (*29)
$role_id为角色ID, (*30)
$field 角色表字段名,默认为:name,即路由地址, (*31)
$status 状态值,0:为启用状态,默认只获取正常启用状态的角色, (*32)
$system_id 系统ID,属于哪个子系统, (*33)
Role::getAccessByRoleId($role_id, $field = "name", $status = 0, $system_id), (*34)
通过角色ID获取角色信息, (*35)
$role_id 角色ID, (*36)
$fields 获取的字段,默认为所有,示例:, (*37)
['role_id','name'], (*38)
Role::getRoleById($role_id, $fields = "*"), (*39)
通过条件进行获取角色, (*40)
$condition为条件数组,例如, (*41)
['role_id'=>1,'name'=>'test'], (*42)
$fields 获取的字段,默认为所有,示例:, (*43)
['role_id','name'], (*44)
Role::getRoleByCondition($condition, $fields = "*"), (*45)
添加角色, (*46)
$data为需要添加的数据,示例:, (*47)
[
'system_id'=>1,
'name'=>'test',
'status'=>0,
'remark'=>'备注',
];, (*48)
Role::add($data);, (*49)
根据条件获取带分页的角色列表, (*50)
$page 页码,默认为0, (*51)
$limit 每一页条数,默认为20, (*52)
$condition 条件数组,默认为空, (*53)
Role::listOfPagin($page, $limit = 20, $condition=[]);, (*54)
给角色授权相关:, (*55)
通过用户ID获取所有权限, (*56)
$user_id 用户ID, (*57)
$system_id 子系统ID, (*58)
该方法返回该用户在该系统ID下的所有规则路由name, (*59)
RoleRule::getAccess($user_id, $system_id);, (*60)
根据条件进行删除, (*61)
RoleRule::deleteByCondition($condition = array());, (*62)
判断是否为超管,注意该超管是写死在配置文件中的,可供调试所用, (*63)
RoleRule::is_super_admin($user_id);, (*64)
判断是否认证通过, (*65)
$pathInfo为需要判断的路由地址,若为null则取当前路由, (*66)
$module_id为版本id,例如:http:://www.monqin.com/v1/user/info, (*67)
则其中的V1为版本id,若无此版本控制,可直接为空, (*68)
$system_id 子系统ID, (*69)
返回值参考:, (*70)
400:已授权, (*71)
401:该用户未找到, (*72)
402:该用户状态异常, (*73)
403:该用户已被删除, (*74)
404:授权异常, (*75)
405:权限不足, (*76)
406:该系统已经被禁用, (*77)
RoleRule::auth($user_id, $pathInfo = null, $module_id = "", $system_id);, (*78)
判断是否有权限, (*79)
$pathInfo为需要判断的路由地址,若为null则取当前路由, (*80)
$module_id为版本id,例如:http:://www.monqin.com/v1/user/info, (*81)
则其中的V1为版本id,若无此版本控制,可直接为空, (*82)
$system_id 子系统ID, (*83)
返回为布尔值, (*84)
RoleRule::hasAuth($user_id, $pathInfo = null, $module_id, $system_id);, (*85)
为角色分配权限, (*86)
$role_id 需要分配权限的角色ID, (*87)
$rule_id_arr 规则节点ID数组, (*88)
RoleRule::access($role_id, array $rule_id_arr);, (*89)
规则相关:, (*90)
根据ID 获取规则信息, (*91)
$rule_id 规则ID, (*92)
$fields 获取的字段,默认为所有,示例:, (*93)
['rule_id','name'], (*94)
Rule::getRuleById($rule_id, $fields = "*");, (*95)
根据rule_id删除数据, (*96)
Rule::deleteByRuleId($rule_id);, (*97)
获取规则节点树型数据结构, (*98)
$type 类型,当type=0时$id为角色ID,否则为用户ID, (*99)
$id 角色或用ID,具体类型取决于$type, (*100)
$menu_show 是否是菜单,0:不是菜单,1:菜单,为null时为所有, (*101)
$status 规则节点状态,0:启用,1:不启用,当为null时为所有, (*102)
$pid 树顶id,若是获取整个树则为0,否则需要填入树顶点ID, (*103)
$fields 获取的字段,默认为null,只获取所需要的字段:, (*104)
['system_id', 'rule_id', 'pid', 'name', 'title', 'href', 'icon', 'status', 'menu_show', 'sort'], (*105)
$is_fifter 是否过滤掉无权限的节点,1:过滤,0:不过滤, (*106)
$module_id $module_id为版本id,例如:http:://www.monqin.com/v1/user/info,则其中的V1为版本id,若无此版本控制,可直接为空, (*107)
$sort 排序,1:降序,0:升序, (*108)
$system_id 子系统ID, (*109)
Rule::getRulesTree($id, $type = 0, $menu_show = null, $status = null, $pid = 0, $fields = null, $is_fifter = 0, $module_id='', $sort = 1, $system_id), (*110)
根据规则ID获取其下所有节点id数组, (*111)
Rule::getSonByRuleId($rule_id);, (*112)
通过rule_id获取所有到顶点的ID, (*113)
Rule::getRootByRuleId($rule_id), (*114)
新增规则节点, (*115)
$data为需要添加的数据,示例:, (*116)
$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',//菜单图标 非必填
], (*117)
Rule::add($data), (*118)
获取规则节点的分页列表, (*119)
$page 页码,默认为0, (*120)
$limit 每一页条数,默认为20, (*121)
$system_id 子系统ID,为null时则获取所有系统的规则节点, (*122)
Rule::listOfPagin($page, $limit = 20, $system_id = null), (*123)
获取用户菜单, (*124)
$user_id 用户ID 必填, (*125)
$system_id 系统ID 必填, (*126)
Rule::getMenus($user_id, $system_id, $sort = 1, $pid = 0, $module_id = "", $menu_show = 1, $status = 0, $is_fifter = 1, $fields = null), (*127)
用户相关:, (*128)
判断用户是否有效, (*129)
User::is_valid($user_id), (*130)
根据id获取用户信息, (*131)
User::getUserById($userId, $fields = ['*']), (*132)
通过用户ID获取所有权限节点名称数组, (*133)
User::getAccessByUserId($user_id, $status=0, $system_id), (*134)
通过用户ID获取子系统所有所属角色的ID列表, (*135)
User::getRolesByUserId($user_id, $system_id), (*136)
获取用户的分页列表, (*137)
$keywords 查询的关键词,提供username和real_name的模糊查找, (*138)
User::listOfPagin($page, $limit = 20, $sort = 1, $keywords = NULL), (*139)
用户-角色相关:, (*140)
给用户分配一个角色, (*141)
$user_id 用户ID, (*142)
$role_id 角色ID, (*143)
UserRole::setRoleByUserId($user_id, $role_id), (*144)
为没有配置角色的用户配置一个基本角色, (*145)
调用此方法需在配置项里配置参数base_role_id的值,该值为你需要指定的一个角色ID, (*146)
UserRole::setBasicRole($user_id), (*147)
为用户批量分配角色, (*148)
$user_id 用户ID, (*149)
$role_id_arr 角色ID 数组, (*150)
$system_id 系统ID 必填, (*151)
UserRole::setUserRole($user_id, $role_id_arr, $system_id), (*152)
根据用户id查询到用户所有的角色信息, (*153)
$user_id 用户ID, (*154)
$fields 获取字段的数组,选填, (*155)
$system_id 系统ID,当获取子系统的该用户对应的角色时则传实际的系统ID;当传NULL时,则获取所有的系统的角色, (*156)
UserRole::getUserRoleByUserId($user_id, $system_id = NULL, $fields = ['*']), (*157)
六、如有任何疑问欢迎加入QQ群:338461207 进行交流, (*158)
if you have any questions, welcome to join QQ group: 338461207, (*159)