請注意,授權用戶查看特定的頁面元素與授權CRUD或其他數據庫操作不同,除非元素指向Controller中的操作Actions。考慮你可能有一些元素,不需要被特定用戶看到,也沒有特定的數據庫操作。到現在爲止,我們得出結論,我們需要以下權限:
- 權限查看
- 權限命令
我相信你可以使用Microsoft Role Provider更換零件。根據MSDN文檔考慮到:
通過授權屬性,您可以指定授權爲 ,但僅限於預定義角色或個人用戶。這給你 高度誰有權查看 網站任何頁面上的控制。
在下一步/問題是如何做到這一點?
我認爲3種方式,可滿足我們的宗旨:
解決方案1:創建具有因轉發每個用戶相關查看特定網頁元素的獨立意見。在這種情況下,我們必須 也創建單獨的控制器操作。我們有像[Authorise(Roles="Administrator")]
每個動作之前檢查用戶類型 。我們 被迫擁有靜態(預定義)角色和輔助功能。而在 一句話不是因爲冗餘的一個好的解決方案,並 不穩定。
解決方案2:簡單地通過在一頁添加用於每個接入限制元件一些if
條件創建頁面動態(對於 例如編輯頁)。這就像使用@if (User.IsInRole("Admin"))
授權特定用戶,並顯示相關 頁面元素如按鈕。在控制器端,我們可以使用 if
條件(因爲添加基於生成/添加的新角色的動態 功能而不是FilterAttribute
),並根據數據庫控制有效的 事務。雖然FilterAttribute
增加了一些優秀的功能(如性能優化)。一句話適中的解決方案。
解決方案3:樣溶液2法,只是 解決問題控制器創建自己的自定義FilterAttribute授權。那將會從AuthorizeAttribute
繼承 ,並且會覆蓋OnAuthorize
方法來執行您需要的操作僅適用於操作。
例如:
public class TableAuthorizeAttribute : AuthorizeAttribute
{
public enum TableAction
{
Read,
Create,
Update,
Delete
}
public TableAction Action { get; set; }
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
//do custom authorizization using Action and getting TableEntryID
//from filterContext.HttpContext.Request.QueryString or
//filterContext.HttpContext.Request.Form
}
}
而其使用量將是這樣的:
[TableAuthorize(Action=TableAuthorizeAttribute.TableAction.Update)]
Here爲約以上概念完整的示例。下面是創建動態AuthorizeAttribute
授權添加到應用程序的新角色的完整示例。
解決方案3一句話完美但複雜的解決方案。
請注意,通過在Actions之前使用FilterAttribute
,我們將應用程序限於靜態/預定義角色。無需使用其他數據結構或在數據庫中生成表格。
好的,謝謝。你知道有沒有其他開發者試圖實現類似的事情的例子? –