我在mvc應用程序中製作安全系統。在MVC中,它必須通過操作方法由AuthorizeAttribute和roles串完成。我可以使MVC 2中的動態渲染依賴用戶權限嗎?
我可以做這個東西:而不是行動解決我想讓視圖在HTML部分隱藏取決於當前用戶權限設置(例如:保存按鈕不可見,如果用戶不是管理員)。
我在mvc應用程序中製作安全系統。在MVC中,它必須通過操作方法由AuthorizeAttribute和roles串完成。我可以使MVC 2中的動態渲染依賴用戶權限嗎?
我可以做這個東西:而不是行動解決我想讓視圖在HTML部分隱藏取決於當前用戶權限設置(例如:保存按鈕不可見,如果用戶不是管理員)。
布賴恩 - 我不認爲這是'隱藏'管理部分的好主意。你基本上只是暴露給任何人在'查看源代碼'模式下打開html的邏輯。最好有一個管理視圖和一個「正常」視圖,只需在控制器操作中執行一個case語句以在需要的地方提供適當的視圖(仍然不是最佳選擇,但遠比隱藏字段更好)。更好的是,有一個包含哪些,如果它是正確的用戶類型等只呈現partialviews主視圖..
只是我的主題「視圖」 .. 吉姆
你可以做A或B
a)創建爲改變各種元素的部分意見,並做一些像
<% if (HttpContext.Current.User.IsInRole("Administrator"))
{
Html.RenderPartial("AdminStuff");
}
else
{
Html.RenderPartial("RegularStuff");
}
%>
二)在你的可視數據/視圖模型設置的作用,並在代碼中(不推薦作爲視圖中使用它應該不包含邏輯)
在控制器
ViewData["Admin"] = HttpContext.Current.User.IsInRole("Administrator");
在視圖
<% if ((bool)ViewData["Admin"]) { %>
<!-- Show admin stuff -->
<% } %>
在你的意見,你可以做條件檢查,如:
<% if (User.IsInRole("Admin")) { %>
<a href="#">An Admin-only link</a>
<% } %>
在局部視圖,用戶財產不公開,但你仍然可以這樣做:
<% var user = HttpContext.Current.User; %>
<% if (user.IsInRole("Admin")) { %>
<a href="#">An Admin-only link</a>
<% } %>
感謝大家的回答。我發現動態渲染視圖在mvc應用程序中是一個不好的實踐。我習慣於認爲可以有一些庫或模板。
順便說一句當我告訴我的PM時,一個帶有角色的字符串是一種常見模式,他很傷心「硬代碼!!!!」。現在我正在設計一些WCF服務,它將是一個「Aplication Authoriser」)))。
這裏的每個人似乎都忘記了這樣的東西存在CSS。你可以非常輕鬆地完成你想要的任務,至少我已經在做,而且工作完美無缺。
讓我給你舉一個簡單的例子
CSS類:模塊操作
例如 模塊用戶 操作:添加,編輯,刪除,列表
<a href="/user/add" class="USER-ADD">Add User</a>
每當改變(添加/更新/刪除)角色,則產生用於每個角色 CSS文件例如 你決定只有管理員可以添加用戶,讓這個CSS生成
//admin_css.css
。用戶-ADD {顯示:無; }
每次打開頁面時,都會檢查用戶具有的角色,並根據角色將css文件加載到標題中。所以你的gui與你在應用程序中的邏輯關聯起來沒有太多的麻煩。
在這一點上它不會被暴露,呈現的html不應該包含任何不適用於用戶角色的內容。 – 2010-07-26 11:42:52
馬修 - 我可能措辭不正確。基本上,我正在按照你的例子描述一種方法(除了在usertype的action內部做一些檢查外)。我已經給你+1了:) – 2010-07-26 11:53:55