2010-10-14 3 views
2

Мне нужно иметь возможность вручную разрешать моим пользователям в моем контроллере.
Я получаю свою аутентификацию от AD, а затем в своем контроллере,
Я хочу сопоставить userID, который я получаю из AD, во внутренний идентификатор пользователя моего приложения.
Возьмите userId из таблицы UserRole, а затем установите его в контроллере, однако
Я не знаю, как установить роль в контроллере?Настройка ролей пользователей в контроллерах?

Я попытался сделать это в моем родном контроллере:
HttpContext.User = новый System.Security.Principal.GenericPrincipal (User.Identity, RoleName);

roleName имеет значение «Admin», но это не работает, поскольку он всегда терпит неудачу. ?

Помогите пожалуйста ....

ответ

3

Предполагая, что вы используете [Authorize] в своих методах контроллера, это будет работать перед тем метод действий и, следовательно, не будет достигнут код, который вы должны задать имя роли - это должен быть установлен до вызова контроллера.

Добавить метод, как это к вашему Global.asax:

protected void Application_OnPostAuthenticateRequest(Object sender, EventArgs e) 
{ 
    IPrincipal contextUser = Context.User; 

    if (contextUser.Identity.AuthenticationType == "Forms") 
    { 
     // determine role name 

     // attach to context 
     HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(User.Identity, roleName); 
     Thread.CurrentPrincipal = HttpContext.Current.User; 
    } 
} 
+0

Привет Clicktricity, спасибо за ответ. Я думаю, что это не сработает, поскольку я использую ADFS для аутентификации моих пользователей. Из-за этого режим аутентификации I не является основанной на форме, поэтому оператор «if» всегда будет ложным. Я ошибаюсь? – TriFu

+0

Достаточно справедливо - просто приспосабливайтесь к вашим потребностям. Ключ в том, что текущее назначение пользователя происходит во время OnPostAuthenticationRequest – Clicktricity

+0

Не будет ли этот метод всегда проверять роль пользователя при попытке получить доступ к некоторым контроллерам? не существует способа сохранить роль пользователя в объекте сеанса или в каком-то cookie-файле? Таким образом, вам не нужно будет всегда попадать в БД для роли пользователя? – TriFu

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