权限
说明
从4.0版本开始,框架引入了权限的概念,其权限优先级由强至弱如下
- 插件禁用:在"application"中配置禁用的插件优先级最高,禁用的插件将绝对不可用,除非插件重写check方法
- 插件权限:通过实现IJSRuleRoleAuthority接口来配置角色和插件之间的关系,此外还可以通过在自定义action对象中使用@JSRuleModelPermit注解来给角色添加插件的权限,此外该注解还可以标注在插件class上,同时出现时将优先采用action对象中的注解属性。重写isOwner方法将会导致插件权限失效
- 实体crud权限:插件权限校验过后如果此次请求是crud类型的插件,那么接下来还会校验实体权限,通过在实体类上的@JSRuleTable注解中的permit属性来控制实体类允许哪些crud操作,默认为允许所有操作。重写checkCrudPermit方法将会导致crud权限失效
- 实体角色权限:实体crud权限之后会判断@JSRuleTable注解中的roles属性,它表示该实体类限定哪些角色访问,除此之外的其它角色不允许访问。重写checkCrudPermit方法将会导致实体角色权限失效
- 角色权限:通过实现IJSRuleRoleAuthority接口来配置角色的权限,它包括插件的权限以及角色与实体类之间的crud访问权限,该方式受制于上述权限。重写checkCrudPermit方法将会导致角色权限失效
权限初始化
下面展示一个自定义权限类的例子
@Component
public class RuleCrudRole implements IJSRuleRoleAuthority {
@Override
public Map<String, JSRuleRolePermit> initRolesPermit() {
ConcurrentHashSet<Class<?>> models = new ConcurrentHashSet<>();
models.add(JSRuleGetCustomModel.class);
models.add(JSRuleDeleteCustomModel.class);
models.add(JSRuleEditCustomModel.class);
ConcurrentHashMap<String,JSRuleCrudPermitEnum> crud = new ConcurrentHashMap<>();
crud.put("TestBank",JSRuleCrudPermitEnum.RU);
crud.put("TestBankAccount",JSRuleCrudPermitEnum.CRU);
JSRuleRolePermit permit = new JSRuleRolePermit(crud,models);
JSRuleRolePermit permit2 = new JSRuleRolePermit(null,models);
Map<String, JSRuleRolePermit> result = new HashMap<>();
result.put("admin",permit);
result.put("skk",null);
return result;
}
}
上面的例子中admin和skk为角色的名称,角色名称对应的JSRuleRolePermit对象则表示该角色拥有哪些权限,包括但不限于插件权限以及实体对象的crud权限
请求方角色初始化
需要继承JSRuleDefaultExtend类或者实现IJSRuleRoleHandler接口并重写对应的"handle"方法,开发者需要在这个方法中返回当前请求方的角色set集合,最终框架会根据初始化的角色信息来判断当前用户是否有权限执行。
提示:此外开发者可以通过重写IJSRuleActionModel接口中的isOwner方法来自定义插件权限的逻辑,重写其check方法还可以自定义某一个插件的检查逻辑,还可以通过重写IJSRuleCrudModel中的checkCrudPermit方法来自定义crud权限的逻辑,总而言之,通过重写父类接口的方法均可以自定义开发