2009-01-03 35 views

回答

25

或者我應該使用檢查 教職員頁自身上而不是 行動中的作用,如果是這樣有人可以PLZ告訴我 如何檢查視圖頁

您需要做兩個。檢查操作的角色作爲安全措施,並檢查視圖上的角色以啓用/禁用特定控件。

在您查看頁面檢查角色的長型是

HttpContext.Current.User.IsInRole("Administrator") 

許多開發商將創建頁面輔助方法,這樣你就可以用更多的東西簡潔爲您的應用落得像

public static bool IsAdmin(this ViewUserControl pg) 
{ 
    return pg.Page.User.IsInRole("Administrator") 
} 

那麼在你看來,你可以使用this.IsAdmin()

爲了保持你的看法凌亂考慮使用部分景色

<% if (IsAdmin()) 
    { 
     Html.RenderPartial("AdminPanel"); 
    } 
    else 
    { 
     Html.RenderPartial("UserPanel"); 
    } 
%> 
+0

我已經做了同樣的事情,但我無法找到控制器的IsAdmin ..爲什麼這樣呢? – Neel 2013-06-12 09:48:05

+0

這是你自己添加的輔助方法。 – 2013-06-13 16:48:24

2

在沒有研究確切機制asp.net MVC使用的角色,我會尖叫的不施加任何業務邏輯的觀點是,你在視圖中

+0

一般來說,我會同意這一點,但我並不那麼教條,以至於我會堅持要生成一個完全不同的視圖,以便根據用戶角色更改添加/刪除特定元素。 – tvanfosson 2009-01-03 16:12:40

0

我做什麼,如果你正在檢查的角色米不熟悉ASP.NET MVC(但),但你不能在視圖中做一些條件過濾器?如果Controller將角色傳遞給View,那麼如果用戶是管理員,則應該能夠執行條件過濾器並顯示某個代碼塊。如果你想顯示一個完全獨立的頁面,那麼你會有多個視圖,否則你可以使用一個,並做一些條件。

在Ruby on Rails的它會是這樣的(對不起,我不知道ASP.NET MVC真的還):

<% if @user.admin? # is the user an admin %> 
    <h3>Admin Tools</h3> 
<% end %> 
<p>Regular site content</p> 

在Rails中,你會加載從諧音額外的內容; ASP.NET MVC有類似的東西,但我忘記了它的名字。也許看看那個?

對不起,我不能有更多的幫助 - 就像我說我沒有真正玩過ASP.NET MVC。

3

如果您使用的是MVC,那麼開發的關鍵就是將邏輯放在視圖和控制器之外。在我看來,像你在WebForms開發軌道上比在MVC軌道上更好。

之所以這麼說,我用這樣的檢查做了很多我的網頁的管理員檢查:

<% if ((bool)ViewData["Admin"]) { %> 
    <!-- Show admin controls here --> 
<% } %> 

但如果你試圖建立實際的邏輯到視圖,那麼你需要找出你可以推回到控制器做什麼工作,並使視圖儘可能愚蠢,根據發送給它的標誌。

5

如果顯示根據角色變化 - 變化很小 - 那麼我會在視圖中進行檢查。如果根據角色限制某些視圖,那麼我會在控制器中進行檢查。如果視圖完全不同(這很難想象),那麼每個角色的單獨視圖可能是合適的。

您可能希望將某些特定於角色的視圖組件抽象爲部分視圖以簡化視圖邏輯 - 基本上,您只需根據角色檢查是否包含部分視圖。

此外,除了檢查「IsAuthenticated」之外,我還會將角色檢查邏輯移至控制器,並根據角色將視圖信息傳遞給包含/排除哪些元素。這使得實際的業務邏輯不會流血到您的視圖中。

+0

在我的項目中,我需要維護分支信息。系統管理員應該能夠查看/維護所有分支信息。分支管理員應該只能看到/維護他們自己的分支信息。我想兩個不同的看法。 – 2011-03-17 22:19:59

2

是啊,這是東西,困擾着我,以及...但在同一時間,它似乎是可笑的加載完全不同的觀點,這樣一個小的變化。

btw 你是如何在你的控制器中設置的。 現在,我的控制器看起來像下面的代碼,我認爲這是不正確的。

[Authorize(Roles = "Admin, Member")] 
public ActionResult RegistrationInformation() 
{ 

    return View(); 
} 
0

我有所有其他模型擴展的基礎模型。在這個模型中,我已經加載了用戶的角​​色。它基於httpcontext.user.isinrole()方法。所有視圖都是強類型的,期望基本模型類型。 因此,我可以隨時檢查所有視圖,如Model.CurrentUser.IsInRoles(Role1 | Role2)。不僅在當然的意見,而且在洞應用。

0

我想完全控制這在視圖中,我發現:

<% if (User.IsInRole("Super User")) { %> 
    <h1>Hello world!</h1> 
<% } %> 

適用於大多數場景。它也可以讓你輕鬆地爲其他角色做條件格式,例如「Content Manager」,「Registered」等。

我喜歡Todd Smith的回答,因爲你可能會改變Admin角色的名字,只需要進行一次更改,而如果將「超級用戶」或「管理員」字符串直接放入視圖中,則無論使用該值,都必須對其進行更改。

相關問題