Авторизация На Уровне Метода Пользовательского Атрибута
Я пытаюсь использовать пользовательские атрибуты для реализации разрешений авторизации для выполнения метода. Вот что у меня есть прямо сейчас (я только начинаю с пользовательских атрибутов):
[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 ответ:
Я не знаю, Может ли это относиться к вашему случаю,но если вы пишете службу WCF, почему бы вам не использовать базовую авторизацию ролей непосредственно из фреймворка? Это либо роль, либо утверждение, и для простейших случаев вы можете определить его с помощью атрибутов. Роли могут быть определены либо черезпользовательский Принципал , либо просто с помощью стандартных поставщиков ролей, определенных в рамках.
[PrincipalPermission(SecurityAction.Demand, Role = 'LoginViaSiteVisitors')] internal static bool HasDesiredPermissions() { //.... }