细粒度权限控制之基本概念篇

       背景: 在开发后台管理页面的某一天,有了个想法,期望页面的一些菜单或者按钮,可以根据一些表里数据来控制其是否展示,顺序,菜单名。

       在参考了众多文章和源码,有了自己的idea并进行实操后,有了属于自己的一套细粒度权限控制的解法。

       这篇文章将对用户,角色,权限这几张表和关系进行详细的介绍,主要是为了将细粒度权限控制的思路介绍给各位,而不是简单丢下代码的那种,个人觉得代码只是一种让思路落地的工具,相比于 源代码更重要的是对这种情况下的个人思路和体会。

       可以确定的是读者如果认真阅读本系列文章后,将对细粒度权限控制的解法有了深刻的体悟,后面可以开创属于个人一套独有的细粒度权限控制。

       首先涉及到 权限控制那么必然要涉及到 用户、角色、权限 这几个定义, 可以通过一句话来介绍这几个关系, 每个人在生活中都 拥有着多个角色(父亲/孩子/上班者), 每个角色下又拥有着 多个职能 。 是不是挺好理解的,

       可以看出来 用户和角色的关系是 多对多,一个用户可以关联多个角色,一个角色也可以关联多个用户;角色和权限的关系是多对多,一个角色可以有多个权限, 一个权限也可以关联多个权限。

       上面是用户,角色,权限的理论介绍,那么落地到数据表是什么情况呢? 根据这些关系,我们讲创建5张表进行维护这些关系。

              a. WU_SYS_USER 用户表 、

              b. WU_SYS_ROLE 角色表 、

              c. WU_SYS_ROLE_USER 用户和角色关系维护表 、

              d. WU_SYS_PERMISSION 权限表 、

              e. WU_SYS_ROLE_PERMISSION 角色和权限关系维护表

    下面是具体的 sql 语句 :

# a.  WU_SYS_USER  用户表  
CREATE TABLE `WU_SYS_USER` (
  `ID` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `USERNAME` VARCHAR(50) COLLATE utf8_bin NOT NULL COMMENT '用户名',
  `PHONE` VARCHAR(20) COLLATE utf8_bin NOT NULL COMMENT '手机号',
  `PASSWORD` VARCHAR(50) COLLATE utf8_bin DEFAULT NULL COMMENT '密码',
  `IMG_URL` VARCHAR(100) COLLATE utf8_bin DEFAULT NULL COMMENT '照片',
  `RKSJ` VARCHAR(50) COLLATE utf8_bin DEFAULT NULL COMMENT '入库时间',
  PRIMARY KEY (`ID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用户表'
# b.  WU_SYS_ROLE 角色表
CREATE TABLE `WU_SYS_ROLE` (
  `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `NAME` varchar(50) COLLATE utf8_bin NOT NULL COMMENT 'NAME',
  `DESCRIPTION` varchar(20) COLLATE utf8_bin NOT NULL COMMENT '描述',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='角色表'
# c. WU_SYS_ROLE_USER 用户和角色关系维护表
CREATE TABLE `WU_SYS_ROLE_USER` (
  `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `USER_ID` int(11) NOT NULL COMMENT '用户ID',
  `ROLE_ID` int(11) NOT NULL COMMENT '角色ID',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用户-角色关联表'
# d.  WU_SYS_PERMISSION 权限表 
CREATE TABLE `WU_SYS_PERMISSION` (
  `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `PARENT_ID` int(11) DEFAULT NULL COMMENT '上级菜单',
  `NAME` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '菜单名',
  `URL` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '权限链接',
  `PERMISSION` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '资源标识',
  `TYPE` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '类型 0菜单,1按钮',
  `SORT` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=70 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='权限表'
# e.  WU_SYS_ROLE_PERMISSION 角色和权限关系维护表
 CREATE TABLE `WU_SYS_ROLE_PERMISSION` (
  `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `ROLE_ID` int(11) NOT NULL COMMENT '角色ID',
  `PERMISSION_ID` int(11) NOT NULL COMMENT '权限ID',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1642 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='角色-用户关联表'

            我们使用 WU_SYS_ROLE_USER 这张表同时保存 用户主键和角色主键 来维护 用户和角色之间多对多的关系, 使用 WU_SYS_ROLE_PERMISSION 这张表同时保存 角色主键和权限主键 来维护 角色和权限之间多对多的关系。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值