1. 程式人生 > >潤乾報表如何實現資料許可權控制

潤乾報表如何實現資料許可權控制

售前現場交流或售後技術支援階段,經常被客戶問到:“你們報表系統是怎麼搞許可權控制的?”

既然經常被問,那麼今天就討論一下這個問題。

首先呢,看看許可權管理長啥樣!

許可權管理:(來自百度百科),一般指根據系統設定的安全規則或者安全策略,使用者可以訪問而且只能訪問自己被授權的資源,不多不少。

許可權管理幾乎出現在任何系統裡面,一般只要有使用者的系統就可能涉及許可權管理。

從控制力度來看,可以將許可權管理分為兩大類:

1,功能級許可權管理;

2,資料級許可權管理。

功能級許可權管理是系統要做的事情,比如哪些人可以看到系統的哪些選單和資源,通常可以由系統開發人員根據業務的流程邏輯控制。而資料級的許可權,特別是報表的資料許可權,則是由報表可以控制或應該控制的事情。

報表的資料許可權控制,可以直觀地理解為:不同的機構、角色或具體到人,訪問同一張報表時所看到的資料是可能不同的。比如,工資條(也是一張簡單的報表),因為絕大多數公司薪資都是保密的,所以很顯然,系統內不同人看到的結果是不能相同的。 再比如,區域銷售情況統計,各區域銷售經理也只能看到所在區域的資料等等。

實際應用環境中,解決此類問題一般是通過直接在 SQL 中篩選出資料繪製報表模板,然後按照登入物件訪問指定的模板就可以了。但是,如果使用使用者的人員眾多,就需要製作 N 多張樣式相同只是 SQL(報表資料集)略有不同的報表,工作量大且不利於後期維護。

Then,潤乾報表是如何解決資料許可權控制的呢?

實際上,針對這種資料許可權問題,在潤乾報表工具中,可以簡單地通過引數或者巨集的方式來實現,報表接收到系統傳來的人員賬號等資訊引數,動態顯示報表中的資料就行了,從而達到資料許可權控制的目的。

接下來,咱們就趕緊瞅瞅該怎麼做:

第一步:資料準備

這裡採用 mysql 資料庫,建立資料表 m_datas , 指令碼如下:

CREATE TABLE m_datas (
       id INT NOT NULL,
       'data' varchar(100) NULL,
       'role' varchar(100) NULL
)

表資料

q1png

ID:編號

DATA:資料

ROLE:可檢視角色編碼

建立角色字典表 m_roles ,指令碼如下:

CREATE TABLE m_roles (
       id INT NOT NULL,
       rolename varchar(100) NULL,
       'role' varchar(100) NULL
)

表資料

q2png

ID:編號

ROLENAME:角色名稱

ROLE:角色編碼

第二步:搞一張報表模板,使用動態引數(巨集),並且拼 sql**** 實現資料許可權

新建一張報表模板

(1)報表資料集中新建一個“sql 型別”資料集,名稱為:m_datas,SQL 語句寫成:

SELECT m_datas.id,m_datas.data,m_datas.role,m_roles.rolename FROM m_datas,m_roles 
WHERE  m_datas.role = m_roles.role ${pri}

根據資料集 m_datas 設計模板並定義表示式:

q3png

其中:

A2單元格錄入表示式:=m_datas.select(id)
B2單元格錄入表示式:=m_datas.data
C2單元格錄入表示式:=m_datas.role
D2單元格錄入表示式:=m_datas.rolename

(2)選單欄:報表à引數,增加“role”引數,引數型別為“普通引數”

q4png

(3)選單欄:報表à引數,增加“pri”引數,引數型別為“動態引數”

q5png

值表示式為:"and m_datas.role>="+role

注意,通過 role 的編號我們可以看出,角色越高看到的資料越多。

儲存模板檔案即可。

第三步:釋出到伺服器,並訪問報表檢視結果資料

把這個報表釋出到報表設計器自帶的 demo 應用下,通過如下 url 訪問:

http://127.0.0.1:6868/demo/reportJsp/showReport.jsp?rpx=datas_pri.rpx&role=0

其中,role 為報表接收的角色 id 值,在整合應用時,可從 session 獲取後傳入。

** 好了,來啦!!**看效果:

role 為 0 時

q6png

切換 role 為 3 時,僅出現角色 ID>=3 的資料

q7png

腫麼樣, 是不是很簡單?

最後,總個結: 潤乾報表不是系統平臺,而是一款面向程式猿用於開發報表的工具類軟體產品。之所以不做成統一平臺,是為了方便和其他應用系統搞在一起,也就是常說的整合,報表開發後,就可以在系統內作為資源被訪問了。而對於功能或資源許可權,並不是潤乾報表有功能缺失,而是這類控制更容易讓整合應用自己去管,而且也可以免去重複登入驗證或搞單點登入的麻煩。



作者:bubblegum
連結:http://c.raqsoft.com.cn/article/1535076354197
來源:乾學院
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。