2011-03-07 47 views
6

我有一個MVC 3應用程序,我正在構建,需要找出一個管理認證和授權的好方案。我使用過會員制,在這種情況下我不想使用它 - 我更喜歡使用我自己的設計和表格。但是,如果適合,我願意使用內置接口來實現我的定製邏輯。幫助MVC認證/授權解決方案

這裏是我的要求:

  • 用戶可以是一個或多個角色的一部分。

  • 角色可能映射到任意數量的「權限」(多對多)。許可類似於「可以編輯其他用戶的帖子」。

  • 每個控制器動作可能允許訪問一個或多個角色(或者可能沒有授權,對於公共頁面)。

  • 我還需要「功能級別」控制哪些角色可以查看/更新視圖上的各種元素。可以使用權限來驅動這些角色。

  • 作爲一個附註,我可能會允許會員使用他們的Facebook和/或Twitter帳戶註冊。但是,這可以獨立於我的自定義成員資格實施完成(如果適合的話)(即,在註冊時創建自定義用戶,然後將其綁定到FB/Twitter帳戶)。

我確定有人做過這樣的事情。但基於我在這個主題上看到的十幾個或更多的博客和SO帖子,沒有一個解決方案真的適合這個,看起來似乎沒有。但是我很有可能無法將這些作品拼湊在一起,而恰當的東西正在把我凝視在臉上。例如,我已經閱讀了一些關於「基於聲明的」認證和「基於角色」的認證,但不確定我是否理解足夠的差異來打電話,也不知道他們需要ASP.NET Membership。我還通過實施IPrincipal和IIdentity以及使用動作過濾器來驅動控制器訪問來了解如何構建自定義成員資格,但我沒有找到任何全面的指導來完成此操作,而且我仍然使用動作過濾器進行了綠化。

我也不確定我是否應該使用.NET的一些內置控件進行註冊,身份驗證,忘記密碼等等。我的直覺並不是,因爲我通常喜歡自己構建這些控件,米也不知道他們是否會在自定義設置中工作。但如果我錯了,讓我知道。

在此先感謝。

+0

您可能會喜歡我的方法http://stackoverflow.com/questions/3964989/how-to-pass-current-user-information-to-all-layers-in-ddd/3969014#3969014 – 2011-03-07 22:04:43

回答

4

請記住,ASP.NET身份驗證/授權框架有兩個不同的部分。首先是會員和角色提供商的前端,然後是使用SqlMembershipProviderSqlRoleProvider的後端。

以我個人的經驗,我發現編寫我自己的MembershipProvider和RoleProvider自定義版本是最簡單的。我認爲它會滿足你的每一個要求。

更新:賈裏德問我:「看來實現的MembershipProvider和RoleProvider增添了不少的開銷(和絨毛)的,我將永遠需要/使用這仍然是要走的路我從做好處呢?這個?「

我想如果你使用認證/授權框架,你可以利用很多內置的東西,比如你可以根據角色來裝飾控制器他們的方法授權,比如[Authorize(Roles = "DefaultUser")],你也可以把這種如果需要,如檢查的意見直接代碼:

<% if (Request.IsAuthenticated) { %> 
<p>Only authenticated users see this.</p> 
<% } %> 

此外,認證/授權負責設置角色/用戶的cookie和加密他們的骯髒的工作的關心,如果你滾你自己的,那麼這是後話。你必須自己做。

Jared也想,「用戶ca n是一個或多個角色的一部分「。」和「角色可以映射到任意數量的」權限「(多對多)。許可類似於「可以編輯其他用戶的帖子」。

我認爲角色和權限是同一件事。所以一個用戶可以擁有多個角色和權限。像「CanEditPosts」「Admin」等

+0

感謝您的回覆。儘管我試圖理解這對我有什麼好處?我已經有用於創建用戶和驗證它們的服務方法。看看[這篇文章](http://mattwrock.com/post/2009/10/14/Implementing-custom-Membership-Provider-and-Role-Provider-for-Authinticating-ASPNET-MVC-Applications.aspx),它似乎實施MembershipProvider和RoleProvider增加了很多開銷(和絨毛),我永遠不會需要/使用。這仍然是要走的路嗎?這樣做對我有什麼好處?再次感謝。 – 2011-03-08 05:57:30

+0

@Jerad - 我添加了一些意見,以解決您的問題以上... – Keltex 2011-03-08 15:36:28

+0

謝謝,好東西。關於你對角色=權限的最後評論,我實際上希望角色和權限的更精細的控制。例如,某些權限(CanEditPosts)可能屬於多個角色(管理員,主持人)。我想將這些權限分組到角色中,以便爲用戶分配一組權限(角色),而不是一組單獨的權限。所以我需要支持這一點。聽起來像我將需要擴大基地提供者一點。 – 2011-03-09 15:34:31