2014-05-01 63 views
2

您好我需要檢查用戶是否在其中一個角色,我與我發現的不同版本的代碼混淆。讓我告訴你我有什麼,此刻第一如何檢查用戶身份在許多角色在asp.net身份

_manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>()); 

var currentUser = _manager.FindById(User.Identity.GetUserId());  

if (!_manager.IsInRole(currentUser.Id, "admin")) 
{ 

} 

而且ApplicationUser

public class ApplicationUser : IdentityUser 
{   
} 

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 

} 

所以我要檢查,如果用戶在角色之一。例如管理員,controbutor,超級用戶等

我發現this example這似乎是一個很好的但我必須在web.config中進行以下更改,使其工作。我不需要像我目前那樣使用我的代碼來做到這一點。

roleManager enabled="true" 

我嘗試研究更多UserManager.IsInRole但我coundn't找到許多關於它。多一點閱讀我明白我發現的帖子是關於簡單會員。

因爲我使用身份,我不應該使用我發現的代碼(指的是鏈接和接受的答案),因爲這將混合的身份和簡單會員?特別我是指這條線Roles.GetRolesForUser。有沒有類似的身份識別方法?我想我對不同的會員框架感到困惑,不知道什麼是正確的用途。我希望有人能解釋我理解。

(我還是想對這個問題,我問的稱號,但我真的需要了解和解決方案=)

回答

4

那麼我找到了一個方法來做到這一點。我不知道UserManager返回的User對象具有Roles屬性和用戶擁有的角色集合。

using Microsoft.AspNet.Identity; 
var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>()); 

var roles = new List<string> { "admin", "contributor" }; 
var currentUser = manager.FindById(User.Identity.GetUserId()); 

if (currentUser.Roles.Any(u => roles.Contains(u.Role.Name))) 
{ 

}  

有關Asp.net身份成員資格的更多信息..這似乎是很好的資源。

http://www.nuget.org/packages/Microsoft.AspNet.Identity.Samples/

0

嗯,我想這一切都取決於什麼,如果你能要求,即使用簡單的會員資格。 如果您正確地集成了成員資格(表單身份驗證),那麼您應該真正使用User.IsInRole(「角色」)。

它看起來像由你已經張貼您正在使用自己的自定義用戶對象,所以在這種情況下有很多在網絡上這樣的例子在這裏第1,我發現 http://www.codeproject.com/Articles/165159/Custom-Membership-Providers我會用一個自定義的成員提供

這個想法是重寫所有的Membership方法,並從服務層返回自己的用戶數據。

希望有所幫助。 Lee

+0

我沒有做任何我認爲的習慣。 ApplicationUser就是從IdentityDbContext派生的IdentityUser。我想我需要一個關於Asp.net Identity的好例子,以及其他會員框架之間的一些比較。 – lawphotog