2012-01-26 3 views
1

Программным, я могу авторизовать пользователя Windows, на основе того, являются ли они в той или иной роли так:Программировать авторизацию пользователя Windows против последовательности пользователей?

if(!User.Identity.IsAuthenticated) 
    return false; 

var isAuthroized = User.IsInRole(@"DOMAIN\Some Role"); 

// ... 

return isAuthorized; 

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

Итак, представьте, что вы пытаетесь проверить подлинность пользователя против данной строки авторизованных пользователей, как вы могли бы с помощью обычного AuthorizeAttribute:

[Authorize(Users = @"DOMAIN\User1, DOMAIN\User2, DOMAIN\User3")] 
public ActionResult SomeAction(){ ... } 

Как программно авторизовать пользователя от этой строки пользователей?

@"DOMAIN\User1, DOMAIN\User2, DOMAIN\User3" 

EDIT: Хорошо, это моя точка путаницы: Что такое точка указать несколько пользователей, если у вас есть (в нормальной AuthorizeAttribute) заявление следующим образом:

[Authorize([email protected]"User1,User2,User3", [email protected]"SomeRole"] 

// I can do this: 

User.IsInRole(roles); 

// But what's the equivalent for the specified users? 

User.Identity.Name.IsInNames(names); // <-- How is the done programmatically? 

I Вероятно, здесь нет отметки, и мне не хватает какой-то информации. Пожалуйста, просветите меня!

EDIT 2: Источник MVC демистифицировал часть этого для меня. Это действительно сделано аналогично тому, что было предложено в одном из приведенных ниже ответов:

if (_usersSplit.Length > 0 && 
    !_usersSplit.Contains(user.Identity.Name, StringComparer.OrdinalIgnoreCase)) { 
    return false; 
} 
+3

Разве это не * * определить роль? –

+0

«авторизуйте пользователя против строки пользователей?»? Я не понимаю. – capdragon

+1

Предоставьте свою собственную роль (для которой, очевидно, потребуется ввести роли в пользователя), который инкапсулирует список пользователей и пользовательский интерфейс управления. –

ответ

0

Я хотел бы использовать HashSet, а проверки существования пользователя является очень быстрой операцией для этого типа коллекции.

Сначала разделите строку и добавьте ее в HashSet.

string[] splittedUsers = usersString.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries); 
var users = new HashSet<string>(splittedUsers); 

Test пользователь, как этот

string user = "xy"; 
if (users.Contains(user)) { 
    // Do something with user 
} 
Смежные вопросы