PHP-RBAC单角色设计-最简单的设计方案

本文介绍了一种在PHP中使用三表进行权限设计的简单方案,包括菜单管理、角色管理和用户管理。详细展示了Mysql表设计,如s_menu菜单表、s_group角色表和s_user用户表,并阐述了其原理,通过表间关联实现用户权限的查询和控制。

三表构成权限关联,在PHP应该是最简单的权限设计方案了:
ps:如果有同学也想要联系,避免重复造轮子,我可以提供下面sql文件哦!
1、菜单管理

![](https://cdn.learnku.com/uploads/images/202106/02/78295/ZUmrUNnurp.jpeg!large)

2、角色管理

![](https://cdn.learnku.com/uploads/images/202106/02/78295/3tt4RkBgok.jpeg!large)

3、用户管理

![](https://cdn.learnku.com/uploads/images/202106/02/78295/rURjvO0y8b.jpeg!large)

Mysql表设计:

1.  s_menu 菜单表

    [![复制代码](https://cdn.learnku.com/uploads/images/201906/26/26612/QZLoLSVCEM.gif!large)](javascript:void(0); "复制代码")

    +------------+------------------+------+-----+---------+----------------+
    | Field      | Type             | Null | Key | Default | Extra          |
    +------------+------------------+------+-----+---------+----------------+
    | id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
    | pid        | int(11)          | YES  |     | 0       |                |父级id
    | crd        | int(11)          | YES  |     | 0       |                |排序
    | title      | varchar(20)      | YES  |     | NULL    |                |名称
    | controller | varchar(30)      | YES  |     | NULL    |                |控制器
    | method     | varchar(30)      | YES  |     | NULL    |                |方法
    | ishidden   | tinyint(1)       | YES  |     | 0       |                |0:显示  1:隐藏
    | status     | tinyint(1)       | YES  |     | 0       |                |0:正常  1:禁用
    | type       | tinyint(1)       | YES  |     | 0       |                |0:系统1 1:系统2(如果单个系统则不需要此字段)
    +------------+------------------+------+-----+---------+----------------+

    [![复制代码](https://cdn.learnku.com/uploads/images/201906/26/26612/QZLoLSVCEM.gif!large)](javascript:void(0); "复制代码")

2.  s_group 角色表

    [![复制代码](https://cdn.learnku.com/uploads/images/201906/26/26612/QZLoLSVCEM.gif!large)](javascript:void(0); "复制代码")

    +--------+------------------+------+-----+---------+----------------+
    | Field  | Type             | Null | Key | Default | Extra          |
    +--------+------------------+------+-----+---------+----------------+
    | id     | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
    | title  | varchar(30)      | YES  |     | NULL    |                |角色标题
    | rights | text             | YES  |     | NULL    |                |权限组,存s_menu表id的json数组
    +--------+------------------+------+-----+---------+----------------+

    [![复制代码](https://cdn.learnku.com/uploads/images/201906/26/26612/QZLoLSVCEM.gif!large)](javascript:void(0); "复制代码")

3.  s_user 用户表

    [![复制代码](https://cdn.learnku.com/uploads/images/201906/26/26612/QZLoLSVCEM.gif!large)](javascript:void(0); "复制代码")

    +----------+------------------+------+-----+---------+----------------+
    | Field    | Type             | Null | Key | Default | Extra          |
    +----------+------------------+------+-----+---------+----------------+
    | id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
    | user     | varchar(20)      | YES  |     | NULL    |                |用户名
    | pass     | varchar(100)     | YES  |     | NULL    |                |密码
    | truename | varchar(20)      | YES  |     | NULL    |                |真实姓名
    | gid      | int(11) unsigned | YES  |     | NULL    |                |角色表 id
    | gid_view | int(11) unsigned | YES  |     | NULL    |                |角色表2 id(意思是一个用户拥有两套系统的角色权限,如果单个系统则不需要此字段)
    | status   | tinyint(4)       | NO   |     | 0       |                |用户状态 0:正常  1:禁用
    | add_time | int(11)          | YES  |     | NULL    |                |添加时间
    +----------+------------------+------+-----+---------+----------------+

    [![复制代码](https://cdn.learnku.com/uploads/images/201906/26/26612/QZLoLSVCEM.gif!large)](javascript:void(0); "复制代码")

原理:

1.  s_menu表间保存类文件的控制器、方法、菜单名称,子级菜单的pid为父级菜单的id进行存储,一级菜单pid默认为0,便于自定义菜单的遍历渲染

    [![复制代码](https://cdn.learnku.com/uploads/images/201906/26/26612/QZLoLSVCEM.gif!large)](javascript:void(0); "复制代码")

    +----+------+------+---------------+------------+--------+----------+--------+------+
    | id | pid  | crd  | title         | controller | method | ishidden | status | type |
    +----+------+------+---------------+------------+--------+----------+--------+------+
    |  1 |    0 |    7 | 安全          |            |        |        0 |      0 |    0 |
    |  2 |    1 |    0 | 用户管理      | User       | index  |        0 |      0 |    0 |
    |  3 |    1 |    1 | 角色管理      | Role       | index  |        0 |      0 |    0 |
    |  4 |    1 |    2 | 表单-菜单管理 | Menu       | index  |        0 |      0 |    0 |
    |  5 |    2 |    0 | 用户添加      | User       | add    |        1 |      0 |    0 |
    |  6 |    2 |    0 | 用户保存      | User       | save   |        1 |      0 |    0 |
    |  7 |    2 |    0 | 用户编辑      | User       | edit   |        1 |      0 |    0 |
    |  8 |    2 |    0 | 用户修改      | User       | update |        1 |      0 |    0 |
    |  9 |    2 |    0 | 用户删除      | User       | delete |        1 |      0 |    0 |
    | 10 |    3 |    0 | 角色添加      | Role       | add    |        1 |      0 |    0 |
    +----+------+------+---------------+------------+--------+----------+--------+------+

    [![复制代码](https://cdn.learnku.com/uploads/images/201906/26/26612/QZLoLSVCEM.gif!large)](javascript:void(0); "复制代码")

    如:安全下面有【用户管理】、【角色管理】、【表彰-菜单管理】3个子菜单

2.  s_group表将多个s_menu_id形成json数组绑定角色名称

    +----+----------+-----------------------------------------------------------------------------+
    | id | title    | rights                                                                      |
    +----+----------+-----------------------------------------------------------------------------+
    | 12 | 视觉设计 | [46,51,59,60,67,92,126,127,272,273,213,214,215,263,268,271,275,317,318,264] |
    | 14 | 财务     | [92,126,127,212,113,115,226,216,217,263,268,264]                            |
    +----+----------+-----------------------------------------------------------------------------+

3.  s_user绑定有角色组的id,当php登录后获取用户表id,就可查询到是否有当前访问的控制器的方法权限

    [![复制代码](https://cdn.learnku.com/uploads/images/201906/26/26612/QZLoLSVCEM.gif!large)](javascript:void(0); "复制代码")

    +----+--------+----------------------------------+----------+------+----------+--------+------------+
    | id | user   | pass                             | truename | gid  | gid_view | status | add_time   |
    +----+--------+----------------------------------+----------+------+----------+--------+------------+
    |  1 | xxx    | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  | xxx      |    1 |        2 |      0 | 1236456622 |
    | 12 | xxx    | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  | xxx      |    7 |        4 |      0 | 1546313958 |
    | 13 | xxx    | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  | xxx      |    9 |        4 |      0 | 1546313989 |
    | 14 | xxx    | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  | xxx      |   10 |        3 |      0 | 1546314013 |
    | 15 | xxx    | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  | xxx      |   16 |        3 |      0 | 1546314060 |
    +----+--------+----------------------------------+----------+------+----------+--------+------------+

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公文内参

浅糖作揖谢谢大佬!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值