2013-04-09 4 views
0

У меня есть пользователи в членстве, и один пользователь может назначить одну или несколько ролей. Я хочу, чтобы проверить конкретные роли страницы, например:Роли и проверка роли ASP.Net для роли пользователя для нескольких ролей

Role1, роль2, Role3, Role4, Role5

Пользователи, которые имеют доступ роль2 и Role3 могут получить доступ к Page1.aspx, а также если пользователь, который имеет доступ Role1 и Role2 также могут получить доступ, поскольку Role2 доступен.

Я осуществил членство и имеют список ролей массива строк пользователя с помощью

строки [] ролей = Roles.GetRolesForUser (Пользователь.Идентичность.Имя);

Как я могу проверить несколько ролей? Могу ли я сделать один за другим с помощью функции Roles.IsUserInRole?

Я использовал; Он возвращает 0 счет из-за партнера в капитале. Как я могу игнорировать случай? И ниже правильный способ проверить массив на массив?

string[] userroles = { "Partner", "testsetsr" }; 
string[] requiredroles = { "contractor", "customer", "sims", "nonclientau", "partner" }; 
     var countInRoles = userroles.Intersect(requiredroles).Count(); 

ответ

0

Вам необходимо будет реализовать свою собственную атрибуцию фильтра авторизации. Для этого вы можете создать класс, расширяющий «AuthorizationAttribute», а затем переопределить OnAuthorization, где вы можете указать требуемые проверки роли.

Небольшой пример о том, как сделать это будет here in Nimesh's .Net Blog

пример не решение вашей личной проблемы, но должно дать вам представление о том, что вам нужно сделать.

Редактировать: То же самое относится к вашим ролевым провайдерам приложений, расширяет его и переопределяет IsUserInRole (или, может быть, даже лучше добавить новый метод), чтобы предоставить вам необходимые проверки, чтобы иметь Roles.IsUserInRole работать так, как вы хотите ,

К вашему 2 вопроса: , если у вас есть 2 массивы и хотите посчитать, сколько членов 1-го массива являются членами 2 в то время как без учета регистра вы можете сделать это с помощью LINQ

var countInRoles = userroles.Select(u => u.ToLower()).Count(u => requiredroles.Select(r => r.ToLower()).Contains(u)); 

С другой стороны, , давайте вместо списков, если у вас есть список требуемых ролей для доступа к некоторым действиям, вы также можете проверить, имеет ли пользователь все необходимые роли, используя linq (опять же с игнорированием случая)

string[] requiredroles = { "Partner", "testsetsr" }; 
string[] userroles = { "contractor", "testsetsr", "customer", "sims", "nonclientau", "partner" }; 
var userHasAllRequiredRoles = requiredroles.Select(r => r.ToLower()).All(r => userroles.Select(u => u.ToLower()).Contains(r)); 

 Смежные вопросы

  • Нет связанных вопросов^_^