湖北省两学一做网站,国外浏览器app下载,做领域细分行业需要建网站吗,对ui设计的理解和认识一、什么是RBAC 基于角色的访问控制#xff08;Role-Based Access Control#xff09;作为传统访问控制#xff08;自主访问#xff0c;强制访问#xff09;的有前景的代替受到广泛的关注。 在RBAC中#xff0c;权限与角色相关联#xff0c;用户通过成为适当角色的成员而… 一、什么是RBAC 基于角色的访问控制Role-Based Access Control作为传统访问控制自主访问强制访问的有前景的代替受到广泛的关注。 在RBAC中权限与角色相关联用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。 在一个组织中角色是为了完成各种工作而创造用户则依据它的责任和资格来被指派相应的角色用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求和系统的合并而赋予新的权限而权限也可根据需要而从某角色中回收。角色与角色的关系可以建立起来以囊括更广泛的客观情况。 二、ThinkPHP中的RBAC 先看下官方给的实例所用到的数据表通过5张表实现权限控制定义如下 RBAC 要用到5个数据表 think_user (用户表) think_role (用户分组表) think_node (操作节点) think_role_user (用户和用户分组的对应) think_access (各个操作和用户组的对应) 用户表 角色表有哪些角色该角色与对应的userid用户相关联 根据用户表的id给出对应的角色id相关联也就是给用户分配角色比如userid为3的角色为2根据role角色表7代表员工的角色 access表权限表比如角色id为2也就是员工的权限可以的对应的结点 结点表代表有哪些应用-模块-模块方法并且定义了之间的一种关系比如noteid为30的是Public模块noteid为31323334的方法addinserteditupdate都属于Public。noteid为85的test方法属于noteid为84的Game模块下的方法。 字段name就是当项目模块或者操作的名称了。字段PID 记录他们的从属关系比如某一个模块是属于哪个项目某个操作属于哪个模块。字段level 表示该节点的层级 换句话就是说 level1 为项目 ,level2为模块 ,level3就是操作了比如说 admin项目他的PID 就是 0 (项目的PID都是0) level就是1,nane就是admin了,admin项目下面有的user模块它的level就应该是2,pid就是admin的id, admin下面user模块的add操作level就该是3了,pid就应该是前面的user对应的ID. 三、config配置文件详解 我们看看thinkphp官方示例中的config文件: PHP array( APP_AUTOLOAD_PATH.TagLib, SESSION_AUTO_STARTtrue, USER_AUTH_ON true, USER_AUTH_TYPE 1, // 默认认证类型 1 登录认证 2 实时认证 USER_AUTH_KEY authId, // 用户认证SESSION标记 ADMIN_AUTH_KEY administrator, USER_AUTH_MODEL User, // 默认验证数据表模型 AUTH_PWD_ENCODER md5, // 用户认证密码加密方式 USER_AUTH_GATEWAY /Public/login,// 默认认证网关 NOT_AUTH_MODULE Public, // 默认无需认证模块 REQUIRE_AUTH_MODULE , // 默认需要认证模块 NOT_AUTH_ACTION , // 默认无需认证操作 REQUIRE_AUTH_ACTION , // 默认需要认证操作 GUEST_AUTH_ON false, // 是否开启游客授权访问 GUEST_AUTH_ID 0, // 游客的用户ID DB_LIKE_FIELDS title|remark, RBAC_ROLE_TABLE think_role, RBAC_USER_TABLE think_role_user, RBAC_ACCESS_TABLE think_access, RBAC_NODE_TABLE think_node, SHOW_PAGE_TRACE1//显示调试信息 ); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 array( APP_AUTOLOAD_PATH.TagLib, SESSION_AUTO_STARTtrue, USER_AUTH_ON true, USER_AUTH_TYPE 1, // 默认认证类型 1 登录认证 2 实时认证 USER_AUTH_KEY authId, // 用户认证SESSION标记 ADMIN_AUTH_KEY administrator, USER_AUTH_MODEL User, // 默认验证数据表模型 AUTH_PWD_ENCODER md5, // 用户认证密码加密方式 USER_AUTH_GATEWAY /Public/login,// 默认认证网关 NOT_AUTH_MODULE Public, // 默认无需认证模块 REQUIRE_AUTH_MODULE , // 默认需要认证模块 NOT_AUTH_ACTION , // 默认无需认证操作 REQUIRE_AUTH_ACTION , // 默认需要认证操作 GUEST_AUTH_ON false, // 是否开启游客授权访问 GUEST_AUTH_ID 0, // 游客的用户ID DB_LIKE_FIELDS title|remark, RBAC_ROLE_TABLE think_role, RBAC_USER_TABLE think_role_user, RBAC_ACCESS_TABLE think_access, RBAC_NODE_TABLE think_node, SHOW_PAGE_TRACE1//显示调试信息 ); 大家看注释就应该懂大半了其中Public模块是无需认证的道理很简单没登录之前大家都是游客身份如果登录页面也要权限那从哪里登录呢是吧呵呵。默认网关地址就是认证失败没有权限跳转到此处重新登陆。ADMIN_AUTH_KEY表示超级管理员权限如果你在user表建立一个名为admin的用户那么这个用户就是超级管理员不用给它分配权限什么权限都有为什么要设置一个这样的管理员因为当你把权限分配错了容易引起系统权限混乱搞得大家都访问不了这时候超级管理员就来了。 四、RBAC类的几个重要的方法 authenticate($map,$model”)方法 传入查询用户的条件和用户表的MODEL 返回数组包含用户的信息 saveAccessList($authIdnull)方法 传入用户的ID 此方法不返回值只是设置 $_SESSION[‘_ACCESS_LIST’]的值其中包含了所有该用户对应的用户组的有权限操作的所有节点 $_SESSION[‘_ACCESS_LIST’][‘项目名’][‘模块名’][‘操作名’]以后判断权限就是判断当前项目模块和操作是否在 $_SESSION[‘_ACCESS_LIST’]中能找到。s checkAccess() 方法 检测当前模块和操作是否需要验证 返回bool类型 checkLogin()方法 检测登录 AccessDecision($appNameAPP_NAME) 方法 就是检测当前项目模块操作 是否在$_SESSION[‘_ACCESS_LIST’]数组中也就是说 在 $_SESSION[‘_ACCESS_LIST’] 数组中$_SESSION[‘_ACCESS_LIST’][‘当前操作’][‘当前模块’][‘当前操作’]是否存在。如果存在表示有权限 否则返回flase。 getAccessList($authId) 方法 通过查询数据库 返回权限列表 $_SESSION[‘_ACCESS_LIST’]的值了。 转载于:https://www.cnblogs.com/freestyle-le/p/4518797.html