How to implement a authority management module

How to implement a rights management module

基于角色的访问控制

基于角色的权限系统(RBAC)是一个在很多系统中都取得过成功应用的访问控制系统,它是一种既直观也很灵活的权限管理系统。

一个核心的RBAC系统是以角色(Role)为中心构成的,它的基本结构如图1.0所示。
在这里插入图片描述
图 1.0

从图中可以看出,它由用户、角色、权限三个部分组成,其中,权限部分又包含目标对象及对目标对象的操作,如图1.1所示。

在这里插入图片描述
图 1.1

有人把实现这个核心的RBAC的系统称为粗粒度的权限管理系统,之所以这样说,是因为它没有解决以下的问题。

在像政府这样有层级的组织结构的系统中,同样的角色,比如局长、上下级局长的权限一同自不必说,即使是同级的局长,也只能有管理他自己所在局的权限。因此,这就要求在用户这一端设置诸如机构、部门等对象,这样做也存在争议,因为这亲做权限系统的粒度是变细了,但是权限与业务逻辑之间的界限开始变得模糊起来了。

上面这段话是罗会波老师在它的著作《JSF第一步:JSF+Spring+Hibernate+Ajax编程实践》里面提到的,整体来说,这段话是对的,不过,我们如果在设计上述系统的时候,只需要用职位将角色细化成小组就可以了。关于角色,我个人的理解是角色就是权限条目的有限集合,或者称为权限组正准确一些。这个时候,如果我们能将角色定义成可以继承的层次结构,那么在后续的使用过程中,就会方便很多。

In Action

CREATE TABLE `tb_authority` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `pid` bigint NOT NULL DEFAULT '0' COMMENT 'parent id',
  `name` varchar(16) NOT NULL DEFAULT '' COMMENT 'authority name',
  `url` varchar(255) DEFAULT '' COMMENT 'url',
  `title` varchar(64) NOT NULL DEFAULT '' COMMENT 'title',
  `target` varchar(64) NOT NULL DEFAULT '' COMMENT 'target',
  `icon` varchar(64) NOT NULL DEFAULT '' COMMENT 'icon',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='authority';

CREATE TABLE `tb_department` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `pid` bigint NOT NULL DEFAULT '0' COMMENT 'parent id',
  `name` varchar(16) NOT NULL DEFAULT '' COMMENT 'department name',
  `code` varchar(255) NOT NULL DEFAULT '' COMMENT 'department code',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='department';

CREATE TABLE `tb_role` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `role_name` varchar(16) NOT NULL DEFAULT '' COMMENT 'role name',
  `role_code` varchar(255) NOT NULL DEFAULT '' COMMENT 'role code',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='role';

CREATE TABLE `tb_role_authority` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `role_id` bigint NOT NULL DEFAULT '0' COMMENT 'role id',
  `authority_id` bigint NOT NULL DEFAULT '0' COMMENT 'authority id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='role authority';

CREATE TABLE `tb_user` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `user_name` varchar(16) NOT NULL DEFAULT '' COMMENT 'user name',
  `password` varchar(255) NOT NULL DEFAULT '' COMMENT 'password',
  `department_id` bigint NOT NULL DEFAULT '0' COMMENT 'department id',
  `email` varchar(255) DEFAULT NULL COMMENT 'email',
  `telephone` varchar(10) NOT NULL DEFAULT '' COMMENT 'telephone',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户';

CREATE TABLE `tb_user_role` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `user_id` bigint NOT NULL DEFAULT '0' COMMENT 'user id',
  `role_id` bigint NOT NULL DEFAULT '0' COMMENT 'role id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='user role';

参考文献

  • 《JSF第一步:JSF+Spring+Hibernate+Ajax编程实践》(罗会波著;北京:清华大学出版社,2007.10;ISBN 978-7-302-15973-5)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qwfys200

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值