• 深入理解yii2之RBAC(模块化系统)


    一、前言

    上一篇文章我们已经大致谈过RBAC到底是什么和yii2底层RBAC接口的分析。

    下面我深入理解一下RBAC权限分配,深入理解下yii2底层RBAC扩展,以及它是如何针对模块化系统的开发的?

    二、介绍

    2.1 下面是张大致的思维导图:

    由图可见,我们对yiiRABC底层接口的扩展逻辑。

    2.2 下面是数据表具体流程图:

    我们扩展了四个数据表格:auth_module、auth_role、auth_role_item、auth_role_child

    2.3下面是引入的数据表结构:

    auth_module表结构

    Id

    primary key

    name(模块、功能名称)

    varchar(255)

    route(路由)

    varchar(255)

    pid

    smallint(6)

    create_at

    bigint

    update_at

    bigint

    status(是否已添加权限、角色)

    smallint(6)  1已添加 2未添加

    1

    营运管理

    fake/one (伪路由)

    0

    1555645646546

    1555645646546

    1

    2

    验卡管理

    check-card/index

    1

    1555645646546

    1555645646546

    1

    3

    商品管理

    shop/index

    1

    1555645646546

    1555645646546

    1

    4

    验卡

    check-card/check

    2

    1555645646546

    1555645646546

    1

    5

    验卡

    check-card/check-card-number

    2

    1555645646546

    1555645646546

    2

    auth_role_child表结构

    id

    primary key

    user_id(用户ID)

    bigint    unique

    role_id(高级角色ID)

    bigint

    create_at

    bigint

    update_at

    bigint

    1

    22

    2

    1555645646546

    1555645646546

    2

    25

    3

    1555645646546

    1555645646546

    3

    12

    1

    1555645646546

    1555645646546

    4

    55

    3

    1555645646546

    1555645646546

    5

    23

    4

    1555645646546

    1555645646546

     

    auth_role_item表结构

     

    role_id(高级角色ID)

    bigint         primary key 联合主键

    auth_item(低级角色)

    varchar(255)    primary key联合主键

    create_at

    bigint

    update_at

    bigint

    1

    营运管理

    1555645646546

    1555645646546

    1

    验卡

    1555645646546

    1555645646546

    1

    公共管理

    1555645646546

    1555645646546

    1

    卡种管理

    1555645646546

    1555645646546

    1

    课种管理

    1555645646546

    1555645646546

     

     

    auth_role表结构

     

     

    Id

    primary key

    name(高级角色)

    varchar(255)

    company_id(公司ID)

    smallint(6)

    venue_id(场馆ID)

    bigint

    update_at

    bigint

    create_at

    bigint

    derive_id(派生角色ID)

    bigint

    1

    营运经理

    1

    [12,14,59]

    1555645646546

    1555645646546

    0

    2

    水吧员工

    1

    [12]

    1555645646546

    1555645646546

    1

    3

    CEO

    1

    [12,14,16,19,20,28,49,55,54,58,53]

    1555645646546

    1555645646546

    0

    4

    团教经理

    1

    [12,14,59]

    1555645646546

    1555645646546

    0

    5

    吧台员工

    1

    [12]

    1555645646546

    1555645646546

    1

     

    模块 =》 子模块 =》 功能    ;  我们动态的为RBAC基础表,添加权限和基础角色, 模块表中的name是auth_item中的基础角色名称。模块中的路由,则是auth_item中权限的名称。然后,基础角色和权限建立关系。分配好模块,添加过基础角色和权限,并建立关系后,

    下一步,我们创建高级角色,给高级角色添加属性,如:组织架构等。创建好高级角色后,我们需要把低级角色绑定给我们的高级角色。好了,一切都准备就绪,我们就可以把用户绑定给我们的高级角色。注意,上一篇RBAC中说到,在模块化的系统中,由于菜单、模块、功能、以及页面元素过多,导致的RBAC在分配用户时,导致的基础角色过多问题。我们这里做了一套独有的解决方案,即:派生规则。我们可以拿到一个高级角色的权限,然后往下派生低级角色,基础高级角色pid是0,这样清晰明了了公司高层到基层的层级关系,

    例如:总经理(高级角色);我们可以拿到它的权限,往下派生。总经理=》副经理=》负责人=》组长等等角色和权限。

     三、尾语

    好了,yii2的RBAC权限到这就结束了,小伙伴们有什么建议和疑问可以在下面评论留言,如需转载请注明作者和来源,支持原创。

     

  • 相关阅读:
    HTTP POST GET 本质区别详解
    本人完成的代码生成器,请多提些建议
    .net实现控件视图状态ViewState
    专门用于微信公众平台的Javascript API导言
    [学习笔记]验证上传文件后缀名类型
    专门用于微信公众平台的Javascript API
    1个月成为HTML5前端工程师
    js中用正则表达式 过滤特殊字符, 校验所有输入域是否含有特殊符号
    SharePoint 2010 根据不同的用户权限显示不同的导航
    (原创)Sharepoint webpart中调用web service报错
  • 原文地址:https://www.cnblogs.com/cleverstone/p/9225928.html
Copyright © 2020-2023  润新知