zoukankan      html  css  js  c++  java
  • tp5的RBAC插件及其使用很方便的管理用户登录及操作权限

    tp5-rbac

    本扩展包是tp5的rbac包,使用了部分tp5的特性实现了关系型数据库中特殊数据结构的处理。

    安装方法

    先安装composer如果不知道怎么安装使用composer请自行百度。
    打开命令行工具切换到你的tp5项目根目录

    如果没有安装migaration与nestedset,先安装

    composer require topthink/think-migration:*

     composer require gmars/tp5-nestedsets:dev-master

    composer require gmars/tp5-rbac
    • 1

    如果该方法报错请按照以下方式操作:

    1. 打开项目根目录下的composer.json
    2. 在require中添加”gmars/tp5-rbac”: “dev-master”
    3. 运行composer update

    添加后composer.json应该有这样的部分:

        "require": {
            "php": ">=5.4.0",
            "topthink/framework": "^5.0",
            "gmars/tp5-rbac": "dev-master"
        },
    • 1
    • 2
    • 3
    • 4
    • 5

    数据迁移

    在使用本插件之前需要有rbac锁需要的数据库。在迁移之前如果你的数据库中已有user数据表那么请你备份自己的user数据表后删除。

    在你的项目的某个config.php中加入如下配置:

    'migration' => [
        'path' => ROOT_PATH .'vendor/gmars/tp5-rbac/'
    ],
    • 1
    • 2
    • 3

    然后把命令行切换到你的项目根目录Windows是cmd运行如下命令

    php think migrate:run
    • 1

    如果迁移运行成功会在你的数据库中生成如下几张表:

    user              用户表
    user_role         用户角色对应表
    role              角色表
    role_permission   角色权限对应表
    permission        角色表
    • 1
    • 2
    • 3
    • 4
    • 5

    使用该插件–RBAC的管理

    在一个系统中RBAC是基于角色的权限控制。作为开发人员需要明白这是两个不同的过程。第一个就是构建系统的RBAC结构,包括添加权限,角色,用户,用户角色对应关系,角色权限对应关系等。

    在此先说明RBAC管理:

    1.添加用户

    这一步是在用户注册时要做的一步,就是讲注册的用户添加到user表中。

    $rbacObj = new Rbac();
    $data = ['user_name' => 'zhangsan', 'status' => 1, 'password' => md5('zhangsan')];
    $rbacObj->createUser($data);
    • 1
    • 2
    • 3

    创建用户时传入唯一一个参数必须是数组。数组中应该包含用户表需要的数据。如果出现其他非user表的字段则会抛出异常。
    该方法返回的结果为false或者Exception或者新添加用户的id

    2.添加权限

    这一步是构建系统的权限。一般我们是以请求的路由为权限的识别标志。在该插件中使用path字段。

    例如我们的系统中有商品列表这样的一个操作需要授权。

    其路由为 /index/goods/list

    添加路由如下:

    $rbacObj = new Rbac();
    $data = [
        'name' => '商品列表',
        'status' => 1,
        'description' => '查看商品的所有列表',
        'path' => '/index/goods/list',
        'create_time' => time()
    ];
    $rbacObj->createPermission($data);
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.添加角色

    在RBAC的角色中角色是有父子关系的,也就是说所添加的角色可以是另一个角色的子角色。

    $rbacObj = new Rbac();
    $data = [
        'name' => '商品管理员',
        'status' => 1,
        'description' => '商品管理员负责商品的查看修改删除等操作',
        'sort_num' => 10,
        'parent_id' => 1
    ];
    $rbacObj->createRole($data);
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    需要注意的是在data中有个字段为parent_id这个字段标识了所要添加的角色的父角色。如果留为空则便是添加的父角色。

    4.为用户分配角色

    当然一个用户可以有多个角色。一般是使用多选框或其他形式选择后以数组的方式传入的。

    例如:

    $rbacObj = new Rbac();
    $rbacObj->assignUserRole(1, [1, 2]);
    • 1
    • 2

    assignUserRole(userId,arrayroleArray = [])

    该方法的第一个参数为用户id第二个参数是一个一位数组,其元素为角色的id

    5.为角色分配权限

    例如:

    $rbacObj = new Rbac();
    $rbacObj->assignRolePermission(1, [1, 2]);
    • 1
    • 2

    将id分别为1,2的权限分配给id为1的角色

    6.删除角色

    删除角色的同时必须删除角色和权限的对应数据

    $rbacObj = new Rbac();
    $rbacObj->delRole(1);
    • 1
    • 2

    其中需要传入的是角色id

    7.将一个角色移到另一个角色下

    以上已经说明了角色是有父子关系的那么肯定能够移动其位置

    $rbacObj = new Rbac();
    $rbacObj->moveRole(1,3);
    • 1
    • 2

    该例子是将id为1的角色移动到id为3的角色下作为子角色。

    还有其他修改删除等方法的文档日后再补全,功能是有的

    使用该插件–RBAC权限验证

    登录后获取权限列表

    如果自己写权限验证则请忽略这一步,如果要使用rbac插件来验证权限则必须要这样做。

    在登录成功后做如下操作:

    $rbacObj = new Rbac();
    $rbacObj->cachePermission(1);
    • 1
    • 2

    这个方法是查询id为1的用户的所有权限并且以path索引后存入cache

    请求时的权限验证

    当然对于每一个方法都要进行权限验证时我们一般是在某一个父类中定义一个方法进行权限验证,验证如下:

    $rbacObj = new Rbac();
    $rbacObj->can('/index/goods/list');
    • 1
    • 2

    该方法是验证当前用户有没有操作/index/goods/list的权限,如果有则返回true如果无则返回false

    其中can的参数可以使用tp5的特性获取。

  • 相关阅读:
    BZOJ.2199.[USACO2011 Jan]奶牛议会(2-SAT)
    BZOJ.1997.[HNOI2010]Planar(2-SAT)
    POJ.3648.Wedding(2-SAT)
    POJ.3678.Katu Puzzle(2-SAT)
    POJ.3207.Ikki's Story IV-Panda's Trick(2-SAT)
    洛谷.4180.[模板]次小生成树Tree(Kruskal LCA 倍增)
    BZOJ.4766.文艺计算姬(Prufer)
    zabbix 微信告警机制
    网络地址
    tcp与udp的区别
  • 原文地址:https://www.cnblogs.com/caicaizi/p/7797357.html
Copyright © 2011-2022 走看看