2010-07-26 38 views
0

我在mvc應用程序中製作安全系統。在MVC中,它必須通過操作方法由AuthorizeAttribute和roles串完成。我可以使MVC 2中的動態渲染依賴用戶權限嗎?

我可以做這個東西:而不是行動解決我想讓視圖在HTML部分隱藏取決於當前用戶權限設置(例如:保存按鈕不可見,如果用戶不是管理員)。

回答

1

布賴恩 - 我不認爲這是'隱藏'管理部分的好主意。你基本上只是暴露給任何人在'查看源代碼'模式下打開html的邏輯。最好有一個管理視圖和一個「正常」視圖,只需在控制器操作中執行一個case語句以在需要的地方提供適當的視圖(仍然不是最佳選擇,但遠比隱藏字段更好)。更好的是,有一個包含哪些,如果它是正確的用戶類型等只呈現partialviews主視圖..

只是我的主題「視圖」 .. 吉姆

+0

在這一點上它不會被暴露,呈現的html不應該包含任何不適用於用戶角色的內容。 – 2010-07-26 11:42:52

+0

馬修 - 我可能措辭不正確。基本上,我正在按照你的例子描述一種方法(除了在usertype的action內部做一些檢查外)。我已經給你+1了:) – 2010-07-26 11:53:55

0

你可以做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 --> 
<% } %> 
2

在你的意見,你可以做條件檢查,如:

<% 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> 
<% } %> 
0

感謝大家的回答。我發現動態渲染視圖在mvc應用程序中是一個不好的實踐。我習慣於認爲可以有一些庫或模板。

順便說一句當我告訴我的PM時,一個帶有角色的字符串是一種常見模式,他很傷心「硬代碼!!!!」。現在我正在設計一些WCF服務,它將是一個「Aplication Authoriser」)))。

0

這裏的每個人似乎都忘記了這樣的東西存在CSS。你可以非常輕鬆地完成你想要的任務,至少我已經在做,而且工作完美無缺。

讓我給你舉一個簡單的例子

  1. 確保您的操作按鈕/地區已定義的CSS類

CSS類:模塊操作

例如 模塊用戶 操作:添加,編輯,刪除,列表

<a href="/user/add" class="USER-ADD">Add User</a> 
  • 每當改變(添加/更新/刪除)角色,則產生用於每個角色 CSS文件例如 你決定只有管理員可以添加用戶,讓這個CSS生成

    //admin_css.css

    。用戶-ADD {顯示:無; }

  • 每次打開頁面時,都會檢查用戶具有的角色,並根據角色將css文件加載到標題中。所以你的gui與你在應用程序中的邏輯關聯起來沒有太多的麻煩。

  • 相關問題