Авторизация на уровне метода пользовательских атрибутов - PullRequest
4 голосов
/ 28 апреля 2011

Я пытаюсь использовать пользовательские атрибуты для реализации прав авторизации для выполнения метода. Вот что у меня сейчас (я только начинаю с пользовательских атрибутов):

[RequiredUserPermissions(UserPermissions.CanLoginViaSite)]
internal static bool HasDesiredPermissions()
{   
    //Execute body here if the attribute decorated permissions exist
    //for current user tracked as this._user (with permissions as
    //this._user.UserPermissions (of type UserPermissions (an enum))
}

//Custom attribute class
[AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
internal sealed class RequiredUserPermissionsAttribute : Attribute
{
    private readonly UserPermissions _requiredPermission;

    public RequiredUserPermissionsAttribute(UserPermissions requiredPermission)
    { this._requiredPermission = requiredPermission; }

    public UserPermissions RequiredPermissions
    { get { return _requiredPermission; } }
}

Ближайший вопрос, который я обнаружил в stackoverflow: Использование атрибута для преждевременного возврата из метода . Ответ был бы идеальным, если бы я использовал инфраструктуру asp.net mvc, но, к сожалению, я сейчас нахожусь в службе WCF и реализую весь уровень авторизации, кроме простого входа в базу данных, который у меня есть сейчас (посредством вызова метода WCF), это не так. выполнимо сейчас с точки зрения графика времени.

Я полагаю, PostSharp , вероятно, является наилучшим вариантом, но, опять же, сейчас это невозможно. Я застрял здесь? Должен ли я просто вернуться к этому через Методы, которые принимают enum и возвращают bool. Я с удовольствием изучу подробные / сложные вещи, если это позволит мне реализовать эту функцию через пользовательские атрибуты.

Любая помощь в том, как я могу это сделать, будет высоко оценена.

1 Ответ

3 голосов
/ 28 апреля 2011

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

[PrincipalPermission(SecurityAction.Demand, Role = 'LoginViaSiteVisitors')]
internal static bool HasDesiredPermissions()
{
   //....
}
...