Как проверить, что пользователь находится во многих ролях в идентификаторе 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>
{

}

Итак, я хочу проверить, находится ли пользователь в одной из ролей. например админ, контробьютер, суперпользователь и т.д.

Я нашел этот пример, который кажется хорошим, но я должен внести следующие изменения в web.config, чтобы заставить его работать. Мне не нужно было делать это с моим кодом, как сейчас.

roleManager enabled="true"

Я пытаюсь больше узнать о UserManager.IsInRole, но не нашел много информации об этом. Немного больше читая, я понимаю, что сообщение, которое я нашел, посвящено простому членству.

Поскольку я использую Identity, мне не следует использовать код, который я нашел (относится к ссылке и принятому ответу), так как это будет смешиванием Identity и Simple Membership? Специально я ссылаюсь на эту строку Roles.GetRolesForUser. Есть ли аналогичный метод для идентификации? Я думаю, что меня смущают разные структуры членства и я не знаю, что такое правильное использование. Я надеюсь, что кто-то может объяснить мне, чтобы понять.

(Мне все еще нужно решение вопроса, который я задал в заголовке, но мне действительно нужно понять =)


person lawphotog    schedule 01.05.2014    source источник


Ответы (2)


Ну, я нашел способ сделать это. Я не знал, что объект User, возвращаемый UserManager, имеет свойство 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 Identity. Кажется, это хороший ресурс.

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

person lawphotog    schedule 01.05.2014

Ну, я думаю, все зависит от ваших требований, например, используйте простое членство, если можете. ЕСЛИ вы правильно интегрируете членство (проверка подлинности с помощью форм), вам действительно следует использовать User.IsInRole("Роль").

Судя по тому, что вы опубликовали, похоже, что вы используете свои собственные пользовательские объекты, поэтому в этом сценарии я бы использовал настраиваемого поставщика членства, в сети есть много примеров этого, вот первый 1, который я нашел http://www.codeproject.com/Articles/165159/Custom-Membership-Providers

Идея состоит в том, чтобы просто переопределить все методы членства и вернуть свои собственные пользовательские данные из уровня обслуживания.

Надеюсь, это поможет. Ли

person Troublesum    schedule 01.05.2014
comment
Я не делаю ничего нестандартного, я думаю. ApplicationUser — это просто IdentityUser, производный от IdentityDbContext. Я думаю, мне нужен хороший пример Asp.net Identity, а также некоторое сравнение между другими структурами членства. - person lawphotog; 01.05.2014