0

我正在開發一個使用ASP.Net MVC 4的應用程序,並且需要能夠以細粒度級別授權用戶 - 可能是頁面上的數據元素,用戶可以採取的特定操作一塊數據等關於授權用戶功能點的指導

我目前正在爲一個角色分配一個人,併爲該角色分配了一個活動的權限(查看,添加,編輯和刪除)。角色和權限值(我使用權限的按位值)被分配給一個活動。我目前在我的ASP.Net MVC應用程序中將活動定義爲動作。因此,爲了導航到MVC操作,用戶必須至少具有該操作的查看權限,否則他們將無法訪問該操作。該用戶可以在該操作中執行的操作取決於其他權限(添加,編輯,刪除)。

這是一個好方法。所有權限都存儲在我的數據庫中,所以我幾乎將權限從UI本身分離出來。我所做的只是檢查用戶在顯示按鈕以加載數據輸入表單之前是否有添加權限。

我很確定這種方法不夠精細。例如,如果我需要在用戶角色中隱藏用戶X的數據列,那麼我不確定如何用我的方法來滿足這個需求。現在查看權限是全部或全部。

我非常不願意在我的視圖代碼中注入一堆if語句來控制顯示給用戶的內容。這將UI與我的安全機制緊密結合在一起。更何況你不能保持這一點。

因此,我很難理解如何使安全機制更加細化,並保持一個很好的清晰分離。當我想到這一點時,我直接從當前的方法中跳躍,在代碼中注入一堆if語句。我沒有看到任何替代品。任何建議,鏈接到例子等最佳實踐是非常讚賞和需要。謝謝你的時間。

回答

0

我發現我一直在尋找被稱爲基於聲明的安全性。 .Net 4.5現在已經出爐了。下面是一個偉大的系列文章逐步完成該過程:

Introduction to Claims based security

1

請不要使此方法更加細化。所有現有的訪問控制範例都基於假設資源是穩固的並且不可分割的(文件就是這方面的一個很好的例子)。否則,它會非常複雜和可怕。

問題是,您將不同性質的權限混合到相同的框架中。第一類是「誰可以訪問資源?」,第二類是「誰應該看到這部分資源?」。

我的建議是額外增加額外data filtering layer

它可以使用現有的相同的角色權限分配結構,甚至可以擴展它。在功能上,這個新層和主要訪問控制應該是相互獨立的。如果關閉其中一個,則剩餘的系統應繼續正常工作。

這種「基於角色的數據過濾」子系統應該根據具體情況仔細規劃。在asp.net中,mvc可以在兩個級別進行過濾:

  1. 數據訪問。從DB讀取數據時,根據訪問權限隱藏其中的一部分。

  2. 演示文稿。以最簡單的方式,不同的視圖呈現不同級別的數據訪問。複雜的方法是使用自定義的HtmlHelper擴展 - 這將調用新的子系統來檢查訪問,同時呈現。


小更新:

作爲門禁系統的主要焦點是‘對象’,也許你會認爲你明白什麼是‘對象’。例如,可以考慮一個對象字段(列)。這種轉變將是一個根本性的變化,並把課程的複雜性,但它可以實現您的大多數要求。

這會工作類似於SQL,其中用戶應指定所需的列,並且系統會檢查請求執行之前列訪問,所以可能你會想研究它是如何做在那裏。

+0

有趣。感謝您的反饋。你有任何鏈接,你可以分享請進一步閱讀? –

+0

這是大學學習的太多的理論,主要是基於黃皮書的一部分 - http://csrc.nist.gov/publications/secpubs/rainbow/std001.txt。我也建議通過「訪問控制」的文章閱讀和找到的東西,將是有益的 - http://en.wikipedia.org/wiki/Access_control。 – mikalai