AD авторизация на основе ролей в MVC3

В нашем приложении для интрасети на основе MVC3 один пользователь AD может принадлежать ко многим ролям, и во время входа в систему он будет выбирать ту роль, под которой он хочет войти. В настоящее время мы аутентифицируем пользователя, используя следующий подход: http://www.codeproject.com/KB/system/everythingInAD.aspx

Как только пользователь аутентифицирован и обнаружен, что он принадлежит той роли, в которой он пытается войти, мы хотели бы разрешить доступ к определенным контроллерам и действиям на основе их роли. Мы бы предпочли использовать атрибут Authorize MVC.

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

Спасибо! Bala

2 ответа

Решение

Вы можете использовать атрибут Authorize, если ваш пользовательский поставщик членства наследует от класса asp.net MemberShipProvider.

Но если вы решите иметь совершенно новый ресурс, который не наследуется от класса asp.net MembershipProvider, вы не можете использовать атрибут Authorize.

@Pankaj прав, но вы можете определить свой собственный атрибут для экзамена: class MyAuthorizationAttribute : FilterAttribute, IAuthorizationFilter и переопределить метод OnAuthorization этого. затем украсьте каждое действие этим пользовательским атрибутом и рассчитайте авторизацию в теле OnAuthorization. это образец:

public class MyAuthorizationAttribute : FilterAttribute, IAuthorizationFilter
    {
        public string _name;

        public MyAuthorizationAttribute(string name)
        {
           this._name = curPerm.name;
        }


        public void OnAuthorization(AuthorizationContext filterContext)
        {
          // Calculate permissions...
          if (!permit)
          {               
             Exception e = new MethodAccessException("Access to partial denied!");
             throw new Exception("Can't access via address bar!", e);
          }
        }
}

и использовать в действии

[MyAuthorizationAttribute ("Add")]
public ActionResult Index()
{
    ViewBag.Message = "About page";

    return View();
}

Надеюсь, что это полезно. Удачи.

Другие вопросы по тегам