2014-07-24 48 views
0

我有我認爲可能是一個相對複雜的訪問控制情況(沒有太多的經驗,我可能是完全錯誤的)。這個系統是一個私人/內部桌面唯一的應用程序,如果這有什麼區別。複雜(?)訪問控制

我在軌道上證書工作人事系統(使用大膽爲表)。只有某些用戶可以訪問此係統,使其有所控制,但需要進一步控制。例如;並非所有的用戶應該能夠訪問證書人員這是管理,這應該只限於人力資源。此外,某些用戶可以訪問任何人員但只有某些證書

目前的想法是將字段添加到證書 & 人員即與許可/訪問級別的int。類似於this設置。然後用戶表也將具有「AccessLevel」字段,以便可以進行比較。

無法確定訪問級別的數量,目前正在考慮以下內容;

[Flags] 
public enum AccessLevel 
{ 
    None, 
    ReadOnly, 
    Normal, // Can view all Certificates and Personnel that aren't set to Management 
    Management, // For "sensitive" Personnel and/or Certificates 
    HR, // Full access 
    Admin // Permission control/editing 
} 

具有不進行訪問控制,以這種複雜的前雖然,我不能肯定,如果我在正確的方向還是不也得走?

+0

等級等級可以發揮作用,例如,如果你有一個員工樹,你希望管理者能夠看到他們的直接報告的證書嗎? – HABO

+0

這在技術上是正確的。儘管如此,它並不真正歸結爲這種層次。 HR主要負責管理每個人的證書。也就是說,人事物流是需要訪問某些證書的人員,因爲他們是與客戶聯繫的人員(但他們不需要訪問權限,簡歷 - 人力資源部門希望使用該系統進行跟蹤),也就是說人符合要求,證明這些證書。 – Trent

+0

對於簡單的系統,我通常使用'Privileges'('PrivilegeId','Name','ShortName'用於應用程序代碼,'Description')和一個'UserPrivileges'表來授予訪問權限和表格控制誰可以授予/撤銷權限,例如'UserAdministersPrivilege'。這避免了位掩蓋,以及位掩碼提供的位可能耗盡的可能性。我已經完成了許多層次深入隱含層次的系統(默認情況下,用戶總是可以查看其分支/部門/公司的文檔),並可以顯式訪問各個層次的權限。 – HABO

回答

0

您應該避免在代碼中寫入授權邏輯。相反,你應該嘗試外部化你的授權。使用可擴展訪問控制標記語言XACML。 XACML爲您提供了一個可擴展的體系結構,一種足以滿足您的授權用例(以及更多)以及更高級策略語言的策略語言。使用XACML,您可以編寫有關不同操作(查看,編輯,控制...)的規則,並且您可以選擇對您而言重要的參數/屬性。例如,你可以寫:

  • 用戶可以編輯文檔,當且僅當user.id == document.owner.id
  • 用戶可以查看文檔,當且僅當user.location == document.location

我最近在雲身份峯會上就外部化授權進行了一次演講。你可以找到我的幻燈片here

HTH, David。

+0

看起來像一個很好的系統。我不確定它會與我正在開發的那個一起工作;它是一個與MSSQL數據庫進行通信的C#WinForms桌面應用程序......所以,據我所知,規則要麼需要硬編碼(絕對不是最好的選擇),要麼保存在數據庫中,因爲這是唯一的部分是集中的。 – Trent

+0

XACML中的規則表示爲XACML。然後您使用PDP對其進行評估,例如, Balana(開源)或Axiomatics(供應商)。然後,您使用PEP SDK編寫您自己的客戶端,以保護您的應用程序... –

+0

@FizzBu​​zz您解決了您的挑戰嗎? –