2011-08-10 3 views
8

Использование атрибута Authorize может указывать роли, которым разрешен доступ к ресурсам.Атрибут Authorize ASP.NET и роль администратора Admin

[Authorize(Roles="User")] 

Но если у меня есть пользователь администратора, который разрешено перейти к любому ресурсу мне нужно указать этот, а

[Authorize(Roles="User, Administrator")] 

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

Так что я имею в виду, если где-то в коде (на контроллере или на действии) было бы это [Authorize(Roles="User")], это значит, что роль администратора также разрешена туда.

Может быть, я могу установить его для всех Ролифицировать роли динамически, как при запуске приложения?

Любые идеи?

ОБНОВЛЕНО:

В настоящее время у меня есть один контроллер администратора с Авторизоваться атрибут [Authorize(Role="Administrator")] и у меня есть какие-то действия в некоторых других контроллеров с атрибутами [Authorize(Role="User")] поэтому мне нужно будет добавить "Administrator" там, а если я не нашел лучшее решение ,

+0

было моим решением любой помощи? – LeftyX

ответ

2

Я думаю, что это сработает для вас. Создайте свой собственный базовый контроллер с помощью AuthorizeAttribute, а затем сделайте ваши другие контроллеры наследуйте свой базовый класс.

[Authorize(Roles="Admin")] 
public class MyFancyController : Controller 
{ 
} 

[Authorize(Roles = "TaxPayer")] 
public class WizardController : MyFancyController 
{ 
... 

Это страшно, хотя, на мой взгляд.

Сколько у вас контроллеров/операций? Что, если вы забудете об этом позже и, может быть, у вас есть страница, на которой вы не хотите, чтобы админы имели доступ?

Сложнее будет отлаживать код?

+0

Я думаю, что это хороший момент, если я не хочу, чтобы доступ к админу был где-то. Вопрос обновлен – Joper

1

Вы можете создать собственный фильтр и использовать его для украшения своих действий или контроллеров. Это простая структура, я использовал довольно много:

public class AuthorizationAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
      { 
      filterContext.Result = new HttpUnauthorizedResult(); 
      return; 
     } 

     var actionName = filterContext.ActionDescriptor.ActionName; 
     var controllerName = filterContext.Controller.GetType().Name; 

     bool isAuthorized =false; 

     // Put your logic here !!!! 

     if (!isAuthorized) { 
      filterContext.Result = new HttpUnauthorizedResult();   
      return; 
     } 
    } 
} 

Вы можете прочитать некоторые более here

2
[Authorize(Roles = "User, Admin")] 
public class PrestamosController : Controller 
{ 
    // controller details 
} 
+0

Было бы даже лучше, если бы вы объяснили код, который вы опубликовали. –

0

Это то, что я: убедитесь, что пользователи, которые находятся в «Admin» роль также находится в роли «Пользователь».

0

Вам нужна концепция Статическая роль и Runtime Role.Вот простой пример:

Ваш список Роль и их уровни:

  • Роль: Администратор | Уровень: 1
  • Роль: Редактор | Уровень: 2
  • Роль: просмотрщик | Уровень: 3

пользователей и их Статическая Роль (Static Роль является роль, которую вы назначены пользователям):

  • Пользователь: Джон | Роль: Admin
  • Пользователь: Sam | Роль: Редактор
  • Пользователь: Peter | Роль: просмотрщик

Во время выполнения вы создаете Роль времени выполнения с использованием статических ролей и уровней ролей, пользователи с более высоким уровнем ролей автоматически получают роли на более низких уровнях. Таким образом, после расчета, Роли времени выполнения для этих пользователей будут:

  • Пользователь: John | Роль: Admin, Editor, Viewer
  • Пользователь: Sam | Роль: редактор, просмотрщик
  • Пользователь: Peter | Роль: просмотрщик

И тогда вы можете просто использовать [Authorize (Roles = «Viewer»)], пользователи с более высоким уровнем разрешений (например, Джон, Сэм) могут получить к нему доступ. Потому что они должны также иметь роль Viewer во время выполнения.

Точка использования роли статической роли и времени выполнения заключается в том, что статическая роль упрощает назначение роли. И роль времени выполнения облегчит авторизацию ресурсов.

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