zoukankan      html  css  js  c++  java
  • 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()方法。

  • 相关阅读:
    Maintaining Online Redo Log Files
    redo
    SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
    undo
    HDU_1207_汉诺塔2
    POJ_1611_The Suspect
    POJ_1847_Tram
    POJ_2255_Tree Recovery
    Queries for Number of Palindromes(求任意子列的回文数)
    POJ_1163_The triangle
  • 原文地址:https://www.cnblogs.com/zxl89/p/6845475.html
Copyright © 2011-2022 走看看