手机版

深入分析ThinkPHP的RBAC(基于角色的权限控制)

时间:2021-11-19 来源:互联网 编辑:宝哥软件园 浏览:

1.什么是基于RBAC角色的访问控制?作为传统访问控制(自主访问、强制访问)的一种有前途的替代方案,它引起了广泛的关注。在RBAC,权限与角色相关联,用户通过成为适当角色的成员来获得这些角色的权限。这大大简化了权限管理。在组织中,创建角色来完成各种任务,并根据用户的职责和资格为其分配相应的角色。用户可以很容易地从一个角色分配到另一个角色。角色可以根据新的需求和系统的组合被赋予新的权限,权限可以根据需要从某个角色中恢复。可以建立与角色的关系,以涵盖更广泛的客观情况。第二,ThinkPHP中的RBAC首先查看官方示例使用的数据表,通过五个表实现权限控制,定义如下:RBAC需要使用五个数据表think _ user think _ role think _ node think _ role _ user(用户与用户组的对应关系)think_access(各种操作与用户组的对应关系)。

用户表

角色表,哪些角色与相应的userid用户相关联

根据用户表的id,给出相应的角色id关联,即角色分配给用户。例如,userid 3的角色是2,根据角色表,7代表员工的角色

访问表,权限表,比如角色id为2,也就是员工的权限,可以是对应的节点

节点表表示存在哪些应用程序-模块-模块方法,并定义它们之间的关系。例如,noteid为30的Public模块,以及noteid为31、32、33和34的添加、插入、编辑和更新方法都属于Public。noteid为85的测试方法属于noteid为84的游戏模块下的方法。三.配置文件的详细描述让我们看看thinkphp官方示例中的配置文件:复制的代码如下: array(' app _ autoload _ path '=' @)。taglib ',' session _ auto _ start'=true,' user _ auth _ on'=true,USER_AUTH_TYPE'=1,//默认身份验证类型1登录身份验证2实时身份验证' USER_AUTH_KEY'='authId ',//用户身份验证会话标志' ADMIN_AUTH_KEY'='administrator ',USER_AUTH_MODEL'='User ',//默认身份验证数据表模型' AUTH_PWD_ENCODER'='md5 ',//用户身份验证密码加密方法' USER _ AUTH _ gateway '='/Public/log in //默认不需要身份验证操作' REQUIRE_AUTH_ACTION'=' ',//默认需要身份验证操作' GUEST_AUTH_ON'=false,//是否打开GUEST授权访问' GUEST_AUTH_ID'=0,//访问者的用户id' db _ like _ fields'=' title |备注',' RBAC _ role _ table'=' think _ role ',' RBAC _ user _ table '=' think _ role _ user ',RBAC _ access _ table '=' think _ access ',' RBAC _ node _ table'=' think _ node ',' show 大家应该都知道大部分笔记,其中Public模块不需要认证。原因很简单。登录之前,大家都是游客。如果登录页面也需要权限,我们可以在哪里登录?对,呵呵。默认网关地址是认证失败,所以没有权限跳转到这里重新登录。ADMIN_AUTH_KEY表示超级管理员的权限。如果您在“用户”表中创建了名为admin的用户,则该用户是超级管理员。你不需要给它分配权限,但是你有各种权限。为什么要设置这样的管理员?因为当你分配错误的权限时,很容易造成系统权限的混乱,使得大家都无法访问。这时,超级管理员来了。四.RBAC类身份验证的几个重要方法($map,$MODEL=")在查询用户的条件中传递,用户表的MODEL返回数组包含用户的信息。传入用户标识的保存访问列表($authId=null)。此方法不返回值。只需设置$_SESSION['_ACCESS_LIST']的值,该值包括该用户对应的用户组的所有节点$_SESSION['_ACCESS_LIST'] ['项目名称']['模块名称']['操作名称'],然后判断当前项目、模块、操作是否在$_SESSION中。checkAccess()方法检测当前模块和操作是否需要验证。checkLogin()方法检测log in ACCESS decision($ app name=app _ name)方法是检测当前项目模块操作是否在$_SESSION['_ACCESS_LIST']数组中。也就是说$_SESSION['_ACCESS_LIST'] ['当前操作'] ['当前模块'] ['当前操作']是否存在于$_SESSION['_ACCESS_LIST']数组中。如果有权限,否则返回flase。getAccessList($authId)方法通过查询数据库返回权限列表$_SESSION['_ACCESS_LIST']的值。

版权声明:深入分析ThinkPHP的RBAC(基于角色的权限控制)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。