企业权限体系接入
前置条件
- 仅面向企业版用户
- 需要独立部署,且需要定制化开发和扩展的用户
- 接入了企业自己的账号和登录体系
接入方式
建议通过注解 + 切面的方式来实现,参考案例如下:
定义一个权限注解
Java
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LovrabetPermission {
/**
* key 取值方式 匹配@{}格式,获取方法入参,支持SpEL表达式.由于内部使用map存储方法入参,需使用[]包装参数
*/
String key() default "";
/**
* 资源key的类型,默认是appCode,主要的作用是来转化成appCode(鉴权必须)
*/
PermitKeyTypeEnum keyType() default PermitKeyTypeEnum.APP_CODE;
/**
* 资源校验类型,鉴权时按照资源类型进行校验
* <br>注意:页面、部门、应用、菜单等基础资源,统一按照应用进行鉴权
*/
ResourceType resourceType() default ResourceType.APP;
}添加注解的实现切面
Java
@Aspect
@Component
@Slf4j
public class LovrabetPermissionAspect implements ApplicationContextAware {
/**
* SmartAppPermission 权限处理逻辑
* @param pjp 切点
* @return 权限判断结果
* @throws Throwable 抛出权限异常
*/
@Around("@annotation(com.lovrabet.permission.LovrabetPermission)")
public Object checkPermission(ProceedingJoinPoint pjp) throws Throwable {
// 自定义实现权限校验
}
}在Controller上添加注解
Java
@GetMapping("/getOne")
@LovrabetPermission(key = "@{[appCode]}")
public Result<SmartApp> getOne(@RequestParam String appCode) {
// 方法实现代码省略。。。
}