权限
权限的设计中,包含了权限组和权限,我们需要先进行定义,然后再分配。权限类型分为:
1、菜单权限,每个菜单都会对应一个权限,菜单权限通过@MenuDef进行定义。
2、功能权限,每个URL地址可以理解为一个功能,功能权限通过@PermissionDef进行定义。
3、逻辑权限,根据业务要求,通过实现PermissionBuilder来进行定义。
4、敏感数据权限,与逻辑权限一样,只在业务上针对数据更加敏感,某个权限是业务权限还是敏感数据权限,一般通过主观判断决定。
权限的定义
在 SoloAdmin 系统中,我们可以通过两种方式来定义权限,但是,在定义权限之前,我们需要定义一个权限组,每个权限都应该属于一个权限组,这样我们在后台分配权限的时候,可以方便的找到该权限,或者全选某个权限组的所有权限。
定义权限组
定义权限组,我们需要写一个权限组的类,并实现 PermissionGroupBuilder
接口,这个类在项目启动的时候会被自动加载,只要有这个类的存在即可,代码如下:
public class AdminPermissionGroups implements PermissionGroupBuilder {
public static final String ACCOUNT = "framework:account";
static List<PermissionGroupBean> permissionGroups = new ArrayList<>();
static {
permissionGroups.add(new PermissionGroupBean(ACCOUNT, "账户管理", null, PermissionTypes.ACTION, 111));
}
@Override
public List<PermissionGroupBean> buildPermissionGroups() {
return permissionGroups;
}
}
这个代码定义了一个权限组,名称为 “账户管理”,ID 为 framework:account
。
定义权限
权限的定义分为两种方式:
- 1) 通过编码实现
PermissionBuilder
接口 - 2) 通过注解
@PermissionDef
给 Action 进行定义
通过编码进行定义权限
和权限组的定义类似,权限的定义也可以通过实现 PermissionBuilder
接口,并重写方法 buildPermissions()
来实现,例如:
public class PortalPermissions implements PermissionBuilder {
static List<PermissionBean> portalPermissions = new ArrayList<>();
static {
// 加手动维护的权限
portalPermissions.add(new PermissionBean("ramework:account:mylogic", "某个逻辑", null, "framework:account", PermissionTypes.LOGIC,1));
}
@Override
public List<PermissionBean> buildPermission() {
return portalPermissions;
}
}
通过注解 @PermissionDef 来实现
例如:
@PermissionDef(name = "我的消息", groupId = AdminPermissionGroups.SYSTEM_MESSAGE)
public void mylist() {
//xxxx
}
以上的代码定义了一个名称为 “我的消息”
的权限,其归属在权限组的 ID 是 AdminPermissionGroups.SYSTEM_MESSAGE
。
权限的分配
通过如上方法定义好权限和权限组后,我们需要进入到后台,在权限构建了进行构建权限,这些权限数据才能自动同步到数据库里去。所谓权限构建,就是把在项目定义的权限,一键同步到数据表 sys_permission 和 sys_permission_group 中。如下图所示:
权限构建完成后,我们就可以在角色里,为某个角色分配权限了,如下图所示: