Asuka集成了SpringSecurity进行权限管理,其内置的@PreAuthorize可以很方便的帮助开发者实现细化到方法的权限控制,如下所示:
@PreAuthorize("@$.hp('sys:role:view')")
@RequestMapping()
public String view() {
return "system/role.html";
}
/**
* 分页查询角色
*/
@OperLog(value = "角色管理", desc = "分页查询")
@PreAuthorize("@$.hp('sys:role:view')")
@ResponseBody
@RequestMapping("/page")
public PageResult<Role> page(HttpServletRequest request) {
PageQuery<Role> query = createPageQuery(request);
return new PageResult<Role>(query.getList(), query.getTotalRow());
}
这是一段RoleController中的代码,其中view()和page()方法都被@PreAuthorize标记,申明这两个方法的调用者必须拥有“sys:role:view”权限,否则不予访问。@$.hp('xxx')
用来判断是否拥有某权限,这是一个简写,hp即hasPermission,如果容易误解,也可以使用 @$.hasPermission('xxx')
,两者是完全等价的。
这是一种参考Ruoyi的实现方式,而简写的做法可能是Asuka独创,不得不说简化了不少代码。
具体的校验方法都在com.asuka.common.security.handler.PermissionValidator
,这里介绍最常用的两个:
- $.hp(‘xx’): 等价于$.hasPermission(‘xx’),调用者是否拥有某权限
- $.hr(‘xx’): 等价于$.hasRole(‘xx’),调用者是否是某角色