15.知識(shí)庫(kù)權(quán)限控制

2019-09-19 12:10 更新

15.知識(shí)庫(kù)權(quán)限控制

概述

知識(shí)庫(kù)的權(quán)限控制指的是針對(duì)URule Pro里的規(guī)則項(xiàng)目、項(xiàng)目里的各種類型文件的讀寫權(quán)限控制。

當(dāng)我們的知識(shí)庫(kù)里多個(gè)規(guī)則項(xiàng)目,每個(gè)項(xiàng)目由不同的人負(fù)責(zé),同時(shí)又有多人負(fù)責(zé)定義規(guī)則項(xiàng)目里不同的規(guī)則文件,這時(shí)就有必要通過URule Pro提供的知識(shí)庫(kù)權(quán)限控制機(jī)制,讓不同的操作人員只能讀寫自己負(fù)責(zé)的規(guī)則項(xiàng)目或規(guī)則文件,這樣可以防止誤操作的發(fā)生。

權(quán)限配置方式操作起來也比較簡(jiǎn)單,就是在配置配置權(quán)限的項(xiàng)目、文件或目錄上右鍵,在彈出的菜單中選擇“配置權(quán)限”項(xiàng),即可打開當(dāng)前項(xiàng)目、文件或目錄的權(quán)限配置,如下圖所示:

如上圖所示,配置權(quán)限時(shí),首先需要選擇配置權(quán)限的主體,比如默認(rèn)是用戶,然后右邊會(huì)出現(xiàn)這個(gè)主體對(duì)當(dāng)前項(xiàng)目、文件或目錄的讀寫配置情況,默認(rèn)情況下,如果不勾選“啟用”復(fù)選框,那么當(dāng)前主體對(duì)當(dāng)前項(xiàng)目、文件或目錄是擁有讀寫權(quán)限的,一旦勾選就必須要配置相應(yīng)的讀寫權(quán)限。

在運(yùn)行時(shí),對(duì)于權(quán)限的計(jì)算采用的是繼承計(jì)算方式,也就是在對(duì)某個(gè)文件進(jìn)行權(quán)限計(jì)算時(shí),首先會(huì)檢查當(dāng)前登錄的主體對(duì)當(dāng)前文件有沒有相應(yīng)的權(quán)限配置,如果有就取這里的配置;如果沒有就看這個(gè)文件所有的目錄(如果在目錄下的話)有沒有相應(yīng)的權(quán)限配置,依次類推,直到取到文件所在項(xiàng)目是否存在配置的權(quán)限。

舉個(gè)例子,假如文件test.rs.xml位于項(xiàng)目test下,張三對(duì)項(xiàng)目test配置的權(quán)限是“查看”為“允許”;“編輯”為“不允許”,而對(duì)文件test.rs.xml沒做任何權(quán)限配置,這樣張三在登錄后能看到test.rs.xml文件,但卻無法對(duì)其進(jìn)行各種編輯(修改保存、刪除、重命名等)。

在URule Pro的權(quán)限配置當(dāng)中,配置的目標(biāo)對(duì)象我們稱之為“主體”,他可能是一個(gè)用戶,也可能是一個(gè)角色;實(shí)際使用時(shí)我們需要實(shí)現(xiàn)com.bstek.urule.console.Principal接口,當(dāng)前系統(tǒng)有一個(gè)名為DefaultPrincipal的默認(rèn)實(shí)現(xiàn)。Principal接口源碼如下:

package com.bstek.urule.console;
/**
 * @author Jacky.gao
 * @since 2015年5月7日
 */
public interface Principal {
    /**
     * @return 名稱
     */
    String getName();


    /**
     * @return 顯示名稱
     */
    String getDisplayName();
    /**
     * @return 所在公司ID
     */
    String getCompanyId();
    /**
     * @return 是否為管理員
     */
    boolean isAdmin();
}

加載權(quán)限配置主體是通過com.bstek.urule.console.EnvironmentProvider接口實(shí)現(xiàn),其源碼如下:

package com.bstek.urule.console;
import java.util.List;
import com.bstek.urule.console.servlet.RequestContext;
/**
 * @author Jacky.gao
 * @since 2015年3月27日
 */
public interface EnvironmentProvider {
    /**
     * @param context 請(qǐng)求上下文對(duì)象
     * @return 返回當(dāng)前登錄主體對(duì)象(可能是用戶或用戶的角色)
     */
    Principal getLoginPrincipal(RequestContext context);


    /**
     * @return 返回當(dāng)前系統(tǒng)當(dāng)中權(quán)限判斷主體集合 ,供配置資源庫(kù)權(quán)限使用
     */
    List<Principal> getPrincipals();
}

EnvironmentProvider接口里的getPrincipals()方法就是返回可用于權(quán)限控制的主體對(duì)象集合,我們?cè)谏蠄D中看到的user1、user2兩個(gè)用戶對(duì)象就是引擎默認(rèn)的EnvironmentProvider接口實(shí)現(xiàn)中提供的兩個(gè)用于權(quán)限控制的主體對(duì)象。

在實(shí)現(xiàn)好這個(gè)接口后,將其配置到spring中成為一個(gè)標(biāo)準(zhǔn)的bean,引擎就會(huì)檢測(cè)到并加載它。如果我們沒有實(shí)現(xiàn)這個(gè)接口,那么將會(huì)采用系統(tǒng)默認(rèn)的EnvironmentProvider接口實(shí)現(xiàn),其源碼如下:

package com.bstek.urule.console;
import java.util.ArrayList;
import java.util.List;
import com.bstek.urule.console.servlet.RequestContext;
/**
 * @author Jacky.gao
 * @since 2016年5月25日
 */
public class DefaultEnvironmentProvider implements EnvironmentProvider {
    @Override
    public Principal getLoginPrincipal(RequestContext context) {
        DefaultPrincipal user=new DefaultPrincipal();
        user.setCompanyId("bstek");
        user.setName("admin");
        user.setAdmin(true);
        return user;
    }
    @Override
    public List<Principal> getPrincipals() {
        DefaultPrincipal user1=new DefaultPrincipal();
        user1.setCompanyId("bstek");
        user1.setName("user1");
        user1.setDisplayName("張三");
        DefaultPrincipal user2=new DefaultPrincipal();
        user2.setCompanyId("bstek");
        user2.setName("user2");
        user2.setDisplayName("李四");
        List<Principal> users=new ArrayList<Principal>();
        users.add(user1);
        users.add(user2);
        return users;
    }
}

可以看到,默認(rèn)的實(shí)現(xiàn)類中g(shù)etPrincipals方法返回“user1”和“user2”兩個(gè)用戶,所以我們可以在上圖權(quán)限配置中看到這兩個(gè)用戶。

在實(shí)際使用當(dāng)中,這里的主體可能是角色或其它,那么我們只需要在這里去返回對(duì)應(yīng)的主體即可,同時(shí)為了方便權(quán)限配置頁查看,可以通過在Spring的properties文件中定義屬性“urule.authority.type”的值來改變具體的顯示名稱,這個(gè)屬性默認(rèn)值為“用戶”,所以在上圖中看到的是“用戶名”和“用戶顯示名”。

需要注意的是屬性“urule.authority.type”值為中文時(shí)需要先將中文編碼為unicode格式,否則屬性將無法識(shí)別。

權(quán)限維護(hù)

從2.1.0版本開始,在URule Pro中提供了一個(gè)頁面用于查看、維護(hù)通過EnvironmentProvider接口的getPrincipals()返回的所有權(quán)限主體的已配置的權(quán)限信息。

打開URule Pro的框架頁面,在左邊項(xiàng)目列表上方的工具欄上,就可以找到這個(gè)用于查看、維護(hù)資源權(quán)限頁面的入口,如下圖所示:

點(diǎn)開之后可以看到如下圖所示的頁面效果:

在這個(gè)頁面中,上方是查詢欄,可以根據(jù)用戶、資源信息進(jìn)行查詢,當(dāng)然如果用戶選擇“全部”,資源框?yàn)榭盏脑?,那么查詢出來的就是所有的資源權(quán)限信息,如下圖所示:

在這個(gè)列表中,“資源狀態(tài)”列表示當(dāng)前資源是否存在,如果不存在,那么就會(huì)顯示“已刪除”的描述,這時(shí)我們就可以手動(dòng)將這個(gè)資源權(quán)限信息刪除了?!翱勺x”、“可編輯”兩列分別表示當(dāng)前權(quán)限主體對(duì)當(dāng)前資源的“可讀”、“可編輯”權(quán)限,對(duì)于這里的權(quán)限,可以通過最后一列里的 修改按鈕對(duì)資源權(quán)限進(jìn)行調(diào)整。

這里的權(quán)限維護(hù)頁面要求當(dāng)前通過EnvironmentProvider接口返回的登錄用戶對(duì)象必須是管理員角色才可以看到并操作,如果是非管理員用戶這個(gè)頁面是不能查看并編輯的。

知識(shí)包的權(quán)限控制

知識(shí)包是URule Pro中外部調(diào)用規(guī)則的唯一入口,在知識(shí)包的管理頁面當(dāng)中如果當(dāng)前登錄用戶是管理員,那么他可以進(jìn)行所有操作,包括知識(shí)包創(chuàng)建、審核、發(fā)布、測(cè)試等等; 但登錄人如果不是一個(gè)管理員,那么他在知識(shí)包管理頁面里能做的操作就是有限制的,比如審核、發(fā)布等功能非管理就不可以操作,同時(shí)對(duì)于審核通過的知識(shí)包非管理員也是不可以進(jìn)行任何維護(hù)的;但對(duì)于知識(shí)包的創(chuàng)建、測(cè)試,未審核通過的知識(shí)包的修改 非管理員是可以操作的。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)