Как получить RoleID в ASP.NET MVC - PullRequest
       52

Как получить RoleID в ASP.NET MVC

3 голосов
/ 03 апреля 2012

Есть ли способ получить RoleId без получения напрямую из БД? Я знаю, что мы можем получить имена ролей по:

string[] allRoles = System.Web.Security.Roles.GetAllRoles();
string[] allRolesForUser = System.Web.Security.Roles.GetRolesForUser(httpContext.User.Identity.Name);

Но мне нужен доступ к roleId.

кто-нибудь имеет представление об этом?

Ответы [ 4 ]

2 голосов
/ 03 апреля 2012

Вы должны добавить таблицу aspnet_Roles в свою модель и использовать запрос (например, LINQ) для получения roleId. Вы можете изменить MembershipProvider, но для этого потребуется больше работы.

2 голосов
/ 03 апреля 2012

Нет.Поставщик ролей не знает об источнике данных.Это может быть очень медленный веб-сервис или супер роскошная база данных NoSQL.Поставщик не знает, что ваша БД в качестве первичного ключа.

Конечно.SqlMembershipProvider делает.Но его раскрытие ключа может привести к нарушениям принципа подстановки Лискова .

Имя роли должно быть уникальным.Таким образом, вы должны быть в состоянии получить его из базы данных.Или почему вы не можете просто использовать имя роли напрямую вместо клавиши db?

0 голосов
/ 10 декабря 2015

Я понимаю, что это несколько лет, но когда я наткнулся на это, я увидел, что на самом деле никто не отвечает полностью на вопрос ... поэтому я подумал, что выложу полное решение.

Тааак ...

Проще говоря:

SELECT RoleId, RoleName FROM aspnet_Roles;
GO

Но для получения RoleIds для пользователя это выглядит так:

SELECT UR.RoleID, R.RoleName FROM
aspnet_Users U, aspnet_Roles R, aspnet_UsersInRoles UR 
WHERE U.UserName = @Username 
AND UR.UserId = U.UserId 
AND UR.RoleID = R.RoleId
GO

Это даст вам список из двух столбцов RoleIds и RoleNames для конкретного пользователя.

В действительности вам не следует пытаться делать это, поскольку существует вероятность взлома безопасности при раскрытии RoleId. Вы должны работать только с RoleNames и использовать методы Membership и Roles для управления вещами.

Надеюсь, это поможет:)

0 голосов
/ 03 апреля 2012

Вы не можете.ASP.NET MVC не позволяет получить RoleId со стандартным функционалом, вы должны получить его из базы данных с помощью имени роли.

...