B S頁面 通用許可權控制 2

2022-02-23 13:59:00 字數 2441 閱讀 9412

恰逢公司網路故障, jira、svn、oracle都無法連線上,那就繼續上次的議題吧。

實現原理深入:

目標:檢視所有招標合同, select * from documents

許可權約束場景:

a. 每個使用者僅可檢視本部門建立的合同: where createdoffice in ( currentuser.childrenoffices)

b. 每個使用者僅可檢視自己建立的合同:    where createdby=currentuser.userid

c.指定許可權使用者可以檢視關聯的合同:    (需要通過alt+雙擊,定義所有的合同許可權,否則預設為all可見)

where documentid in (select resourceid in aclparty p where p.partyid in

( currentuser.offices, currentuser.userid, currentuser.roles, currentuser.groups )  

) or documentid not in (select resourceid in aclparty p )

檢視此使用者/部門/角色/工作組擁有的合同, 以及未作授權的合同可見。

d. 上述許可權的組合

where createdoffice in (currentuser.childrenoffices) and documentid in (resource … in ….aclparty …of ….currentuser…)

3.  實施約束:

queryinfo info = new queryinfo(「documents d」);

//ilist alldocs = dao.findlist(info);

僅需設定如下屬性, 則上述約束的sql會自動注入到查詢條件後。

a. info.aclproperty=」d.createdoffice」;   (常量檢測createdoffice)

b. info.aclproperty=」d.createdby」;        (常量檢測createdby)

c. info.aclproperty=」d.id」;

d.  info.aclproperty=」d.id,d.createdoffice」;

擴充套件應用:

檢測使用者對某一資源的控制串:

a. bool  haspurview = currentuser.getacloperation(「resourceid」,"operationcode」);

b. btn_del_.visible  = currentuser.getacloperation(「documentid001」,"del」);

c. 對於同一資源id, 一次取出此使用者對應的所有operationcode。

2.   驗證使用者對某一資源的操作

queryinfo info = new queryinfo(「delete from documents d」);

info.addparam(「officeid」, currentuser.office);

info.aclproperty=「d.id」;   ///等同於 info.where.add(「id」,"documentid in (resuource …in ….aclparty …of ….currentuser…)");

dao.executeupdate(info);

上述操作即可完成: 刪除所有  本人擁有許可權的、且屬於本部門的合同。

強制資料許可權:

1.queryinfo無需定義任何aclproperty

2. 通過aop,在dao攔截所有queryinfo

3. 逐一檢驗queryinfo的queryobject, 與aclitem 中的所有module=queryobject 的專案比較, 如果        

info.queryobject in (aclitem.resourcecode)  and  info.getoperationcode() == aclitem.operationcode,  

則 info.aclproperty=aclitem.policy;

4. 自動激發aclproperty校驗。

總結:

通過上述步驟, 對資料項進行人工控制、自動注入都是非常方便的。 其控制粒度就是物件的屬性。 根據屬性在  資源-授權組 的設定, 即可有效的進行資料許可權  判斷、控制、校驗。

但目前對  同一物件 多個屬性 疊加 校驗時, 疊加策略如何靈活定義(and, or) ??

如: 檢視  經過總經理審批的  and  我建立的

檢視 經過總經理審批的    or   我建立的

B S頁面 通用資料許可權控制

資料許可權常見場景有 資料僅部門級可見 資料僅本人可見 資料僅某角色可見 在可見的基礎上,進行功能控制 修改,刪除 在樹形結構裡,在可見基礎上進行 新增 修改 刪除控制 我的實現方式 資源 所有者 請思考哪些可以是資源,哪些可以是所有者 例如 在乙個oa應用中的擬辦工作,它是所有單證流程的起始點。但...

頁面端標籤控制許可權

匯入依賴 org.springframework.security spring security taglibs version spring security.xml中新增 webexpressionhandler class org.springframework.security.web.a...

Struts2許可權控制

1 實現許可權控制 本示例應用要求使用者登陸,且必須為指定使用者名稱才可以檢視系統中某個檢視資源 否則,系統直接轉入登陸頁面。對於上面的需求,可以在每個action的執行實際處理邏輯之前,先執行許可權檢查邏輯,但這種做法不利於 復用。因為大部分action裡的許可權檢查 都大同小異,故將這些許可權檢...