權(quán)限
說明
從4.0版本開始,框架引入了權(quán)限的概念,其權(quán)限優(yōu)先級(jí)由強(qiáng)至弱如下
- 插件禁用:在"application"中配置禁用的插件優(yōu)先級(jí)最高,禁用的插件將絕對(duì)不可用,除非插件重寫check方法
- 插件權(quán)限:通過實(shí)現(xiàn)IJSRuleRoleAuthority接口來配置角色和插件之間的關(guān)系,此外還可以通過在自定義action對(duì)象中使用@JSRuleModelPermit注解來給角色添加插件的權(quán)限,此外該注解還可以標(biāo)注在插件class上,同時(shí)出現(xiàn)時(shí)將優(yōu)先采用action對(duì)象中的注解屬性。重寫isOwner方法將會(huì)導(dǎo)致插件權(quán)限失效
- 實(shí)體crud權(quán)限:插件權(quán)限校驗(yàn)過后如果此次請(qǐng)求是crud類型的插件,那么接下來還會(huì)校驗(yàn)實(shí)體權(quán)限,通過在實(shí)體類上的@JSRuleTable注解中的permit屬性來控制實(shí)體類允許哪些crud操作,默認(rèn)為允許所有操作。重寫checkCrudPermit方法將會(huì)導(dǎo)致crud權(quán)限失效
- 實(shí)體角色權(quán)限:實(shí)體crud權(quán)限之后會(huì)判斷@JSRuleTable注解中的roles屬性,它表示該實(shí)體類限定哪些角色訪問,除此之外的其它角色不允許訪問。重寫checkCrudPermit方法將會(huì)導(dǎo)致實(shí)體角色權(quán)限失效
- 角色權(quán)限:通過實(shí)現(xiàn)IJSRuleRoleAuthority接口來配置角色的權(quán)限,它包括插件的權(quán)限以及角色與實(shí)體類之間的crud訪問權(quán)限,該方式受制于上述權(quán)限。重寫checkCrudPermit方法將會(huì)導(dǎo)致角色權(quán)限失效
權(quán)限初始化
下面展示一個(gè)自定義權(quán)限類的例子
@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為角色的名稱,角色名稱對(duì)應(yīng)的JSRuleRolePermit對(duì)象則表示該角色擁有哪些權(quán)限,包括但不限于插件權(quán)限以及實(shí)體對(duì)象的crud權(quán)限
請(qǐng)求方角色初始化
需要繼承JSRuleDefaultExtend類或者實(shí)現(xiàn)IJSRuleRoleHandler接口并重寫對(duì)應(yīng)的"handle"方法,開發(fā)者需要在這個(gè)方法中返回當(dāng)前請(qǐng)求方的角色set集合,最終框架會(huì)根據(jù)初始化的角色信息來判斷當(dāng)前用戶是否有權(quán)限執(zhí)行。
提示:此外開發(fā)者可以通過重寫IJSRuleActionModel接口中的isOwner方法來自定義插件權(quán)限的邏輯,重寫其check方法還可以自定義某一個(gè)插件的檢查邏輯,還可以通過重寫IJSRuleCrudModel中的checkCrudPermit方法來自定義crud權(quán)限的邏輯,總而言之,通過重寫父類接口的方法均可以自定義開發(fā)