Авторизация На Уровне Метода Пользовательского Атрибута


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

[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 framework но, к сожалению, я сейчас нахожусь в Службе WCF и реализую весь уровень авторизации за пределами простой вход в базу данных, который у меня есть прямо сейчас (через вызов метода WCF), сейчас невозможен с точки зрения временной шкалы.

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

Любая помощь с тем, как я могу пойти об этом будет много сказано.

1 3

1 ответ:

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

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