简介
在web项目中,我们在页面访问的时候,很多页面是需要做权限控制的,那么我们一起来看看我们怎么做权限控制的吧。
实战
1、创建注解类:PermissionManage.java
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Authoor SHUSONGPING
*
* @Date 2019/12/16
* @Version 1.0
* @companty IT好帅公司出品
*/
@Retention(RUNTIME)
@Target(METHOD)
public @interface PermissionManage {
long value() default 0;
}
2、创建页面资源名称处理器
a、接口:PageService.java
public interface PageService {
String getPageName(String pageName,Long permissionLevel);
}
b、实现类:PageServiceImpl.java
@Service
public class PageServiceImpl implements PageService {
@Override
@PermissionManage
public String getPageName(String pageName,Long permissionLevel){
return pageName;
}
}
3、切面拦截:PermissionManageAspect.java
@Component
@Aspect
@Order(value = 5)
public class PermissionManageAspect {
@Autowired(required = false)
private PowerService powerService;
@Around("@annotation(permissionManage)")
public Object around(ProceedingJoinPoint joinPoint, PermissionManage permissionManage){
Object obj = null;
//获取参数 固定两个参数 第一个为
Object[] args = joinPoint.getArgs();
long value = permissionManage.value();
String name = joinPoint.getSignature().getName();
Long type = Long.valueOf(args[1].toString());
boolean powerFactory = powerService.powerFactory(type);
if (!powerFactory)
return obj = new String("redirect:/power/nopower");
try {
obj = joinPoint.proceed();
} catch (Throwable throwable) {
//出现问题 则重定向到错误页面
return obj = new String("redirect:/error");
}
return obj;
}
}
4、访问测试
//页面处理
//获取组织审核页面
@RequestMapping("/org")
public String doOrganizationAudit(){
/*
之前的使用模式,后面更改啦
//系统用户权限判断
boolean systemAdmin = powerService.powerFactory(1L);
if (!systemAdmin)
return "redirect:/power/nopower";
*/
return pageService.getPageName("org_audit",1L);
}
5、我们的权限处理类
a、权限接口:
/ *
* 功能: 获取用户系统权限
*
* 权限级别:
* 1:代表超级管理里员或系统管理
* 2:代表组织管理员
* 3:部门管理员
* 4:代表普通用户
*
*/
public interface PowerService {
/**
* 权限工厂,使用全向编号获取对应权限
* 允许更高权限通过
* 1:代表超级管理里员或系统管理
* 2:代表组织管理员
* 3:部门管理员
* 4:代表普通用户
*
* @param powerType
* @return
*/
boolean powerFactory(Long powerType);
/**
* 根据用户id判断用户是否为超级管理员
* @param userId 用户id唯一标识
* @return
*/
boolean isSuperAdmin(Long userId);
/**
* 根据用户id判断用户是否为系统管理员
* @param userId 用户id唯一标识
* @return
*/
boolean isSystemAdmin(Long userId);
/**
* 根据用户id判断用户是否为组织管理员
* @param userId 用户id唯一标识
* @return
*/
boolean isOrangeAdmin(Long userId);
/**
* 根据用户id判断用户是否为部门管理员
* @param userId 用户id唯一标识
* @return
*/
boolean isDeptAdmin(Long userId);
/**
* 根据用户id判断用户是否为普通用户
* @param userId 用户id唯一标识
* @return
*/
boolean isOrdinary(Long userId);
}
b、权限实现:
@Service
public class PowerServiceImpl implements PowerService {
@Autowired(required = false)
private SysRoleMapper roleMapper;
@Autowired(required = false)
private SysUserRolesMapper userRolesMapper;
@Override
public boolean powerFactory(Long powerType) {
boolean flag = false;
//1、获取用户信息
SysUsers user = UserThreadLocal.getUser();
Long userId = user.getId();
if (powerType == 1) {
flag = isSystemAdmin(userId);
} else if (powerType == 2) {
flag = isOrangeAdmin(userId) || isSystemAdmin(userId);
} else if (powerType == 3) {
flag = isDeptAdmin(userId) || isOrangeAdmin(userId) || isSystemAdmin(userId);
} else if (powerType == 4) {
flag = isOrdinary(userId) || isDeptAdmin(userId) || isOrangeAdmin(userId) || isSystemAdmin(userId);
}
return flag;
}
@Override
public boolean isSuperAdmin(Long userId) {
Long roleId = getMaxRoleID(userId);
Integer permissionLevel = getPermissionLevel(roleId);
return permissionLevel == 1 ? true : false;
}
@Override
public boolean isSystemAdmin(Long userId) {
Long roleId = getMaxRoleID(userId);
Integer permissionLevel = getPermissionLevel(roleId);
return permissionLevel == 1 ? true : false;
}
@Override
public boolean isOrangeAdmin(Long userId) {
Long roleId = getMaxRoleID(userId);
Integer permissionLevel = getPermissionLevel(roleId);
return permissionLevel == 2 ? true : false;
}
@Override
public boolean isDeptAdmin(Long userId) {
Long roleId = getMaxRoleID(userId);
Integer permissionLevel = getPermissionLevel(roleId);
return permissionLevel == 3 ? true : false;
}
@Override
public boolean isOrdinary(Long userId) {
Long roleId = getMaxRoleID(userId);
Integer permissionLevel = getPermissionLevel(roleId);
return permissionLevel > 3 ? true : false;
}
/**
* 获取用户最高权限
*/
public Long getMaxRoleID(Long userId) {
QueryWrapper<SysUserRoles> queryWrapper = new QueryWrapper();
queryWrapper.eq("user_id", userId);
queryWrapper.orderByAsc("role_id");
List<SysUserRoles> userRolesList = userRolesMapper.selectList(queryWrapper);
return userRolesList.get(0).getRoleId();
}
/***
*
* 功能: 获取用户权限级别
*
* @param id
* @return
*/
private Integer getPermissionLevel(Long id) {
SysRoles roles = roleMapper.selectById(id);
return roles.getPermissionLevel();
}
}