AuthController
/auth/b/doLogin
参数校验
查表SYS_USER
匹配密码
execLoginB(saBaseClientLoginUser, device);
fillSaBaseLoginUserAndUpdateCache(saBaseLoginUser);
查询用户的角色、权限、数据范围
GlobalConfigure
注册一个SaServletFilter过滤器,B端用户使用 StpUtil.checkLogin(); 校验登录
登录校验通过后, 下一步校验接口是否有权限
AuthConfigure
registry.addInterceptor(new SaInterceptor()).addPathPatterns("/**"); 注册了一个SaInterceptor SaAnnotationStrategy.instance.checkMethodAnnotation.accept(method);
public void registerDefaultAnnotationHandler() {
annotationHandlerMap.put(SaCheckLogin.class, new SaCheckLoginHandler());
annotationHandlerMap.put(SaCheckRole.class, new SaCheckRoleHandler());
annotationHandlerMap.put(SaCheckPermission.class, new SaCheckPermissionHandler());
annotationHandlerMap.put(SaCheckSafe.class, new SaCheckSafeHandler());
annotationHandlerMap.put(SaCheckDisable.class, new SaCheckDisableHandler());
annotationHandlerMap.put(SaCheckHttpBasic.class, new SaCheckHttpBasicHandler());
annotationHandlerMap.put(SaCheckHttpDigest.class, new SaCheckHttpDigestHandler());
annotationHandlerMap.put(SaCheckOr.class, new SaCheckOrHandler());
}
每个接口上自己权限注解
@SaCheckLogin
@SaCheckPermission("/biz/dict/page")
等等, 就到对应的Handler中执行判断是否有权限
用户角色权限使用了4张表
sys_user
sys_resource
sys_role
sys_relation
sys_relation表存了用户角色(SYS_USER_HAS_ROLE)、用户菜单(SYS_USER_HAS_RESOURCE)、用户权限(SYS_USER_HAS_PERMISSION)等等各种关系都存进去了, 类型看 SysRelationCategoryEnum 类
这样根据用户先查一次角色id,然后再查用户id或角色id对应的权限,就可以获取到用户拥有的所有菜单和权限了。