2013-11-20 70 views
1

假設我有一個ASP.NET MVC 4應用程序。我需要在同一用戶的不同頁面上提供不同的權限。例如,同一個用戶可以是一個頁面上的管理員,另一個上是來賓。 MVC默認提供系統範圍的用戶權限。 我挖出了一些信息,我應該使用自定義會員供應商來實現我的目標,但我還不確定這一點。 有人可以提出一個解決方案嗎?ASP.NET MVC 4爲不同頁面上的用戶提供不同的權限

角色在同一類型的頁面上應該表現相同。假設論壇上的主題內容只能由創建者或主持人編輯。但用戶將無法編輯他人的主題,主持人將無法編輯不屬於他的主題主題組的主題。我的應用程序中的角色系統應該具有相似的行爲。

+0

你只想實現自己的邏輯。在'/ foo/bar'動作中說,你只是在邏輯上檢查用戶是否在角色中並允許或拒絕該動作,然後在'/ foo/baz'中再次檢查並允許或拒絕。不過,你應該注意到這會讓事情變得複雜。考慮擁有多個角色,而不是單個角色,這意味着不同控制器/操作中的不同事物。 – xdumaine

+0

我會說看看使用多個角色。例如而不是管理員考慮使用SectionAdministrator和OtherSectionGuest。 –

+0

您可以將AuthorizeAttribute放置在您的控制器的操作上,併爲用戶提供應該訪問特定操作的用戶屬性。 –

回答

0

您不一定必須創建自定義成員資格提供程序,但您必須以不同方式考慮權限。

開始時,用「操作」在你的腦袋替換單詞「角色」

您需要創建一個應用程序中的原子,細粒度的權限,例如:

  • UserPropertiesView
  • UserPropertiesModify
  • CREATEUSER
  • DeleteUser
  • RolesView
  • RolesModify
  • CREATEROLE
  • DeleteRole

可能很難在第一,但這個讓你在個人用戶分配操作偉大的控制和靈活性。由於不同的頁面會有不同的操作,因此您可以自定義其訪問權限。

不幸的是,開箱即用的ASP.Net成員和角色提供者都是脫離了課程粒度角色的概念。 只要你知道他們是運營,而不是角色,你會很好。

抽象是你的朋友在這裏:

public static class Permissions 
{ 
    public static bool Operation(string op) 
    { 
     //this class can be a lot better 
     // it can be testable, and check 
     // error conditions, but this is 
     // only an example :) 
     return HttpContext.Current.User.IsInRole(op); 
    } 
} 

某處你會希望將所有這些操作成角色,但是這將需要你做一些定製編程。

自定義提供者實際上並不那麼可怕,而且您可以輕鬆擴展內置的提供者。

+0

謝謝你,喬希。在我問這個問題之前,我實際上已經想到了這個解決方案。我被特別要求不實施這個解決方案,因爲它「太靈活」。 :) 但是,我相信這是迄今爲止最好的解決方案。 – Andrew

相關問題