2012-04-18 52 views
2

我知道你可以使用Authorize屬性來控制對Controller或ActionMethod的訪問......但是更細粒度的控制呢?例如,基於用戶角色允許/禁止特定字段似乎很常見。也許在員工檔案中,員工可以編輯他的個人檔案信息,但只有主管可以更改他的職位...有沒有什麼可以幫助處理ASP.NET MVC3的「字段級」授權?

最好我希望能夠正常開發視圖,模型和控制器,並具有配置頁面然後網站管理員可以使用該網站以任何粒度來配置授權。換句話說,程序員不應該擔心它(除了編寫/集成該系統的特定部分的人)。

我可以設想DisplayFor和EditorFor檢查屬性以使字段呈現爲ReadOnly,Hidden等。 。也許這些屬性會在運行時從某種授權提供程序中添加。

問題是:是否有框架或其他東西已經這樣做?

回答

0

您可以使用HtmlHelper在字段級別實現安全性。在下面的例子中,他們使用的文本框僅實現,但它可以很容易地擴展到所有類型的控件:

http://bartreyserhove.blogspot.ca/2008/12/field-level-security-using-aspnet-mvc.html

+0

沒有真正回答我的問題......我知道我可以寫助手,客戶展示文稿和editorfors和所有......但我希望有一個更優雅的解決方案和B)我希望有人其他人已經做到了! – CodeRedick 2012-04-19 15:13:03

+0

我不認爲有人已經這樣做了,但我正在爲它編寫一個插件,如果你可以等待2周,那麼你可以使用它:)如果有人已經做到了,那麼如果你可以讓我也知道。 – 2012-04-19 15:17:46

1

編寫自定義ModelMetaDataProvider,可以讓你改變每個模型的元數據,並他們之前的屬性使其成爲觀點。如果元數據值爲ShowForEdit = false或ShowForDisplay = false,則內置助手將不會呈現字段。

您可以利用規則引擎或其他ACL來操縱每個模型和屬性的元數據,以便在不觸摸內置助手的情況下獲得大部分開箱即用的行爲。在需要更多控制的邊緣情況下,您可以編寫自己的幫助程序,並在metadata.AdditionalValues字典中傳遞更復雜的數據。

相關問題