1.权限控制流程如下
2.数据库模型,简单的RBAC模型
3.流程实现
1.登录功能,登录成功后将当前用户存放session
2.在aspect类中,定义切点,在前置通知方法处,取出session中的User,对请求进行身份认证
3.身份认证后,获取请求url,判断权限
public void doVedify(){
//1.验证登录状态
User currentUser = (User) SessionUtil.getSessionAttribute("currentUser");
if(currentUser == null){
throw new LoginException();
}
//2.验证权限
String url = request.getRequestURI();
Set<Role> roles = currentUser.getRoles();
//标记
boolean flag = false;
for(Role role : roles){
Set<Privilage> privilages = role.getPrivilages();
//资源控制,把权限存放到session,然后前端根据权限显示相应的方法或模块
SessionUtil.setSessionAttribute("privilages", privilages);
//权限控制
if(!url.equals("/access/index/hello")){
for(Privilage privilage : privilages) {
if (privilage.getRemark().equals(url)) { flag = true; }
}
if(flag == false){
throw new AccessException();
}
}
}
}
demo代码:https://gitee.com/hlx1326/access.git