15.知識庫權限控制

2019-09-19 12:10 更新

15.知識庫權限控制

概述

知識庫的權限控制指的是針對URule Pro里的規(guī)則項目、項目里的各種類型文件的讀寫權限控制。

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

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

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

在運行時,對于權限的計算采用的是繼承計算方式,也就是在對某個文件進行權限計算時,首先會檢查當前登錄的主體對當前文件有沒有相應的權限配置,如果有就取這里的配置;如果沒有就看這個文件所有的目錄(如果在目錄下的話)有沒有相應的權限配置,依次類推,直到取到文件所在項目是否存在配置的權限。

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

在URule Pro的權限配置當中,配置的目標對象我們稱之為“主體”,他可能是一個用戶,也可能是一個角色;實際使用時我們需要實現(xiàn)com.bstek.urule.console.Principal接口,當前系統(tǒng)有一個名為DefaultPrincipal的默認實現(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();
}

加載權限配置主體是通過com.bstek.urule.console.EnvironmentProvider接口實現(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 請求上下文對象
     * @return 返回當前登錄主體對象(可能是用戶或用戶的角色)
     */
    Principal getLoginPrincipal(RequestContext context);


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

EnvironmentProvider接口里的getPrincipals()方法就是返回可用于權限控制的主體對象集合,我們在上圖中看到的user1、user2兩個用戶對象就是引擎默認的EnvironmentProvider接口實現(xiàn)中提供的兩個用于權限控制的主體對象。

在實現(xiàn)好這個接口后,將其配置到spring中成為一個標準的bean,引擎就會檢測到并加載它。如果我們沒有實現(xiàn)這個接口,那么將會采用系統(tǒng)默認的EnvironmentProvider接口實現(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;
    }
}

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

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

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

權限維護

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

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

點開之后可以看到如下圖所示的頁面效果:

在這個頁面中,上方是查詢欄,可以根據(jù)用戶、資源信息進行查詢,當然如果用戶選擇“全部”,資源框為空的話,那么查詢出來的就是所有的資源權限信息,如下圖所示:

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

這里的權限維護頁面要求當前通過EnvironmentProvider接口返回的登錄用戶對象必須是管理員角色才可以看到并操作,如果是非管理員用戶這個頁面是不能查看并編輯的。

知識包的權限控制

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

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號