2013-03-10 3 views
0

У меня есть 3 роли: Registered Users, Approved Users, and Admins.
Доступ к сайту доступен только Approved users и Admins.Ограничение доступа к сайту для конкретной роли

Чтобы ограничить анонимный доступ я добавил фильтр в FilterConfig следующим образом:

filters.Add(new System.Web.Mvc.AuthorizeAttribute()); 

Теперь для зарегистрированных пользователей Я хочу, чтобы перенаправить на целевую страницу поговорке:

Обратитесь к одному из администраторов, чтобы вас одобрить.

Я не уверен, что это правильный способ сделать это.
Я могу настроить атрибут authorize на каждом из контроллеров, но я не уверен, что это хороший способ.
Кроме того, я не уверен, где я должен указать действие перенаправления по умолчанию на основе роли.
Я знаю, что могу указать действие перенаправления по умолчанию в RouteConfig.cs, но не знаю, где указать роль.

+0

Я не совсем понимаю, что вы хотите. Вы хотите разрешить доступ к странице для пользователей, прошедших проверку подлинности, но переадресовать их другим пользователям? Вы хотите предоставить доступ к странице авторизованным пользователям, но не к аутентифицированным пользователям, которым не хватает надлежащей роли? –

+0

@DaveA, если пользователь анонимный показать только вход, если пользователь зарегистрирован, показать целевую страницу, для всех остальных ролей показать полный сайт – user194076

+0

Хорошо, я понимаю. Если пользователь аутентифицирован, разрешите доступ, иначе перенаправляйтесь на логин. Но все остальное, немного запутанно. Другие роли? Помимо чего? –

ответ

1

воняло является правильным, что с [Authorize] атрибутом будет перенаправлять все пользователь которые не вошли на страницу входа. Это половина твоей диллемы.

Оттуда вам необходимо изменить свой метод logon, чтобы проверить, имеет ли только что введенный вошел пользователь права (например, ConfirmedUser). Это сложно, потому что User.IsInRole("ConfirmedUser") всегда будет ложным в вашем методе logon. Это связано с тем, что объект User заполняется объектом http, который не будет повторно заполнен до следующего повторного цикла. К счастью, вы можете использовать Roles.IsUserInRole(userName, "ConfirmedUser"), чтобы проверить, имеет ли пользователь правильную роль.

Итак, в рамках вашего метода входа в систему, после аутентификации пользователя, зарегистрируйте пользователя и перенаправьте его на метод [AllowAnonymous], который сообщает им, что они еще не подтверждены.

if (Roles.IsUserInRole(userName, "ConfirmedUser") 
{ 
       FormsAuthentication.SignOut(); 
       return RedirectToAction("WarningMsg", "Home"); 

} 
+0

Извините, мне потребовалось некоторое время, чтобы попробовать, но это отлично работает. Большое спасибо за Вашу помощь!!! – user194076

+0

Рад, что я мог помочь. Забавно, глядя на мой код, я допустил ошибку. Оператор if должен проверить, что у пользователя НЕ была роль - (! Roles.IsUserInRole (userName, «ConfirmedUser»)). Но я думаю, вы пришли к правильному выводу по своему усмотрению :) –

0

Для этого вы должны использовать атрибуты [Authorize].

Ограниченные страницы будут иметь свой контроллер или действие, украшенное [Authorize(Roles="Approved User,Admin")], «целевая страница» для зарегистрированных пользователей будет [Authorize(Roles="Registered User,Approved User,Admin")], а действие входа в систему будет [AllowAnonymous].

Если пользователь не авторизован, он будет перенаправлен на Account/Login. Вам нужно будет создать некоторую логику в этом действии, которая перенаправляет «Зарегистрированных пользователей», которые уже вошли на вашу целевую страницу. Другие должны просто увидеть стандартную страницу входа.

EDIT

Логика для перенаправления «Зарегистрированных пользователей» на странице входа на целевой странице будет выглядеть примерно так

[AllowAnonymous] 
public ActionResult Login(string returnUrl) 
{ 

    if (User.Identity.IsAuthenticated && Roles.IsUserInRole("Registered User")) 
     return RedirectToAction("LandingPage"); 

    ViewBag.ReturnUrl = returnUrl; 
    return View(); 
} 
+0

** Вам нужно будет создать некоторую логику в этом действии, которая перенаправляет «Зарегистрированных пользователей», которые уже вошли на вашу целевую страницу. ** Я думаю, что это та часть, с которой борется OP. –

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