自定义属性方法级别授权



我试图使用自定义属性来实现执行方法的授权权限。这是我现在所拥有的(我刚刚开始自定义属性):

[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。如果它能让我通过自定义属性实现这个功能,我很高兴学习详细/复杂的东西。

如果有任何帮助,我将不胜感激。

我不知道它是否适用于您的情况,但是如果您正在编写WCF服务,为什么不直接从框架中使用基于角色的授权?它是基于角色或声明的,对于最简单的情况,您可以通过属性来定义它。角色可以通过自定义主体来定义,也可以简单地使用框架中定义的标准角色提供程序来定义。

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

最新更新