TP框架中RBAC的介绍与认识--适合菜鸟初学者

RBAC的介绍与认识

  1. RBAC是Role-Based Access Control的首字母,译成中文即基于角色的权限访问控制。简单来说就是用户对应角色,角色对应权限,一个用户可以对应多个角色,一个角色对应着多个权限,他们之间形成的是多对多的关系,因此就有了“用户-角色-权限”。

  2. 需求:
    为何需要设置RBAC权限管理?由于角色、权限之间的变化比角色、用户关系之间的变化相对要慢得多(好比新公司不断增进员工,但是里面每个职位所对应做的事是变化比较小的),减小了授权管理的复杂性,降低管理开销;而且能够灵活地支持应用系统的安全策略,并对应用系统的变化有很大的伸缩性;在操作上,权限分配直观、容易理解,便于使用(只需对角色分配权限就可以了,方便操作);分级权限适合分层的用户级形式;重用性强。

  3. 设计:

    用户表:记录下用户的基本信息,该用户属于哪个渠道,该管理员是普通管理员还是超级管理员。所以增加了渠道字段source_id,以及管理员字段is_admin。管理员分为三种,普通管理员、超级管理员、系统管理员。系统管理员可以理解为开发者,用来创建超级管理员并给超级管理员分配权限,超级管理员则是对应渠道的最大权限管理员。

    角色表:用户通过角色与资源相关联。这里需要增加渠道字段,每个渠道创建的角色归本渠道所有。(这边角色可以有:编辑者、审查员)

    资源表:这里的理解就是一个个的系统菜单。(系统的操作菜单:文章的添加、文章的修改、文章的删除、文章的查看等操作)

    角色资源关系表:维护角色与资源的关系。(比如:编辑者只能对文章进行添加、以及文章修改;而审查员能对文章进行查看以及文章的删除等等)
    在TP框架中你可以在Extend/Library/ORG/Util中找到RBAC.class.php文件参考建表语句,其中表字段的含义如下:
    think_user表:这里写图片描述

    think_role表:这里写图片描述

    think_node表:这里写图片描述

    think_role_user表:这里写图片描述

其表之间的关联关系如图:

这里写图片描述

4.实现:

1.实现RBAC管理的前导性工作

首先,主要是做一些前导性的工作,1)用户的增、删、改、查 2)角色的增、删、改、查 3)节点的增、删、改、查 4)配置权限(更新权限)。然后,RBAC处理类提供静态的方法有:
这里写图片描述这里写图片描述这里写图片描述

2.config文件文件配置

array(
    'APP_AUTOLOAD_PATH'=>'@.TagLib',
    'SESSION_AUTO_START'=>true,
    '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_TRACE'=>1//显示调试信息
);

ADMIN_AUTH_KEY表示超级管理员权限,如果你在user表建立一个名为admin的用户,那么这个用户就是超级管理员,不用给它分配权限,什么权限都有,为什么要设置一个这样的管理员,因为当你把权限分配错了容易引起系统权限混乱,搞得大家都访问不了,这时候超级管理员就来了。(这也就是为什么需要超级管理员了)

3.RBAC处理类的实际应用

在完成用户登录,角色创建,节点增删改查的工作后,就只剩下了RBAC如何在对应程序代码中应用了。挻简单的,只用在原来的代码其他上改动几个地方即可。
用户登录时,写入用户权限
用户操作时,进行权限验证(在其验证时要在控制器目录创建一个
CommonAction.class.php文件,然后改写所有要权限验证的类,让其继承自CommonAction,进行每次控制器的判断)

在ThinkPHP中提供了一个_initialize()方法,是在类初始化就会执行的,也就是只要后面控制器继承自CommonAction类,就会在作对应操作时,执行_initialize()方法。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值