Asuka集成了SpringSecurity进行权限管理,其内置的@PreAuthorize可以很方便的帮助开发者实现细化到方法的权限控制,如下所示:

    1. @PreAuthorize("@$.hp('sys:role:view')")
    2. @RequestMapping()
    3. public String view() {
    4. return "system/role.html";
    5. }
    6. /**
    7. * 分页查询角色
    8. */
    9. @OperLog(value = "角色管理", desc = "分页查询")
    10. @PreAuthorize("@$.hp('sys:role:view')")
    11. @ResponseBody
    12. @RequestMapping("/page")
    13. public PageResult<Role> page(HttpServletRequest request) {
    14. PageQuery<Role> query = createPageQuery(request);
    15. return new PageResult<Role>(query.getList(), query.getTotalRow());
    16. }

    这是一段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’),调用者是否是某角色