Skip to content

企业权限体系接入

前置条件

  • 仅面向企业版用户
  • 需要独立部署,且需要定制化开发和扩展的用户
  • 接入了企业自己的账号和登录体系

接入方式

建议通过注解 + 切面的方式来实现,参考案例如下:

定义一个权限注解

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) {
    // 方法实现代码省略。。。
}

基于飞书知识库同步生成,内容以飞书源文档为准