一共5个表
- 用户表
- 角色表
- 权限表
- 用户角色中间表
- 角色权限中间表
权限验证
- 通过角色来判断有没有权限。 比如 if 用户有在用户角色中间表中有经理的角色, 就可以查看工资。这中判断比较笼统。适合比如实现不同的角色登录以后看到不同的菜单。
- 通过权限标识来判断, 这个就需要查出用户拥有的具体权限。 这个权限控制比较细致。
适合细致的,比如部门公司的管理员,只能修改该部门下的员工资料。
Shiro 要点
- Subject:主体,代表了当前“用户
- SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且它管理着所有Subject;可以看出它是Shiro的核心
- Realm:域,Shiro从从Realm获取安全数据(如用户、角色、权限)
- 最简单的一个Shiro应用:
1、应用代码通过Subject来进行认证和授权,而Subject又委托给SecurityManager;
2、我们需要给Shiro的SecurityManager注入Realm,从而让SecurityManager能得到合法的用户及其权限进行判断。
Shiro 授权流程
-
1、首先调用Subject.isPermitted接口
-
2 调用相应的Realm获取主题相应的角色/权限;
-
3、Authorizer会判断Realm的角色/权限是否和传入的匹配,如果有多个Realm,会委托给ModularRealmAuthorizer进行循环判断,如果匹配如isPermitted会返回true,否则返回false表示授权失败。