什么是 RBAC
RBAC(Role-BasedAccessControl )基于角色的访问控制。
RBAC 认为权限的过程可以抽象概括为:
判断【Who 是否可以对 What 进行 How 的访问操作(Operator)】
Who:权限的拥用者或主体
What:权限针对的对象或资源
How:具体的权限
Operator:操作。表明对 What 的 How 操作。也就是 Privilege+Resource
Role:角色,一定数量的权限的集合。 权限分配的单位与载体,目的是隔离User与Privilege 的逻辑关系
其他相关模型:RBAC96 模型中RBAC0、RBAC1、RBAC2、RBAC3
RBAC需求
1)实现用户登录功能
2)使用 RBAC0 模型管理系统权限
3)对系统的菜单以及菜单中的链接进行管理。
4)用户登录后首页根据用户角色显示该角色所对应的菜单
5)禁止用户越级访问
技术选择
1)框架:SpringMVC+Spring+Mybatis
2)数据库:Mysql
1.建表
首先说明一下各个表需要存储的信息以及之间的关系:
用户表(用户名、密码、角色表id)、角色表(角色id、角色名)
菜单表(菜单id、菜单名、菜单地址、父目录id)
功能表(功能id、功能名称、功能地址、菜单id)
菜单角色中间表(角色id、菜单id)
其中:多个用户对应一个角色,菜单和角色多对多,功能和菜单是多对一关系
用户表
CREATETABLE`users`( `username`varchar(50)NOTNULL, `userpwd`varchar(50)DEFAULTNULL, `role_id`int(11)DEFAULTNULL,
PRIMARYKEY(`username`), KEY`users_fk`(`role_id`), CONSTRAINT`users_fk`FOREIGN KEY(`role_id`)REFERENCES`roles`(`roleid`) )ENGINE=InnoDBDEFAULTCHARSET=utf8;
角色表
CREATETABLE`roles`( `roleid`int(11)NOTNULLAUTO_INCREMENT, `rolename`varchar(50)DEFAULTNULL, PRIMARYKEY(`roleid`) )ENGINE=InnoDBDEFAULTCHARSET=utf8;
菜单表
CREATETABLE`menus`( `menuid`int(11)NOTNULLAUTO_INCREMENT,
`menuname`varchar(50)DEFAULTNULL, `menuurl`varchar(50)DEFAULTNULL, `fatherid`int(11)DEFAULTNULL,
PRIMARYKEY(`menuid`) )ENGINE=InnoDBDEFAULTCHARSET=utf8;<