我正在尝试使用自定义属性来实现授权权限以执行方法。这就是我现在所拥有的(我只是开始使用自定义属性):
[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上找到的最接近的问题是Using an attribute to prematurely return from a method。如果我使用asp.net mvc框架,答案本来是完美的,但不幸的是我现在正在使用WCF服务并且实现整个授权层超出我现在拥有的简单数据库登录(通过WCF方法调用)不是从时间轴的角度来看,现在是可行的。
我相信PostSharp可能是最好的选择,但现在又不是一个可行的选择。我被困在这里吗?我是否应该通过采用枚举和返回布尔值的方法再回过头来做这件事。我很乐意学习详细/复杂的东西,如果它能让我通过自定义的attiributes实现这个功能。
对我如何解决这个问题的任何帮助将不胜感激。
答案 0 :(得分:3)
我不知道它是否适用于您的情况,但如果您正在编写WCF服务,为什么不直接从框架使用角色基础授权?它既可以是角色,也可以是基于声明的,对于最简单的情况,您可以通过属性来定义它。 可以通过Custom Principal或仅使用框架中定义的标准角色提供程序来定义角色。
[PrincipalPermission(SecurityAction.Demand, Role = 'LoginViaSiteVisitors')]
internal static bool HasDesiredPermissions()
{
//....
}