Custom Authorize Attribute дополнительный параметр? - PullRequest
1 голос
/ 20 сентября 2009

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

Мне нужно иметь, например, IsInRoles (string role, int perm), другими словами, я хочу заменить его на новый IsinRoles или, возможно, создать другой метод для архивирования этого результата.

Возможно ли это? или мне нужно написать другой атрибут авторизации?

Большое спасибо за беспокойство ...

PS: я работаю над ASP.net MVC, поэтому мне нужно, чтобы фильтр [Authorize] был запущен и работал.

1 Ответ

6 голосов
/ 20 сентября 2009

Я думаю, вы можете просто добавить публичное свойство в свой пользовательский атрибут AuthorizeAttribute.

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    /// <summary>
    /// Add the allowed roles to this property.
    /// </summary>
    public YourCustomRoles RequiredRole;

    public int YourCustomValue;

    /// <summary>
    /// Checks to see if the user is authenticated and has the
    /// correct role to access a particular view.
    /// </summary>        
    /// <param name="httpContext"></param>
    /// <returns></returns>
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (httpContext == null) throw new ArgumentNullException("httpContext");

        // Make sure the user is authenticated.
        if (httpContext.User.Identity.IsAuthenticated == false) return false;

        // Can use your properties if needed and do your checks
        bool authorized = DoSomeCustomChecksHere();

        return authorized;
    }
}

Использование, я думаю, будет (хотя я и не пробовал):

[CustomAuthorizeAttribute (RequiredRole=MyCustomRole.Role1 | MyCustomRole.Role2, YourCustomValue=1234)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...