在.Net应用程序中以集中或干净的方式检查基于角色的权限

时间:2011-02-13 01:18:12

标签: c# .net permissions

我试图避免使用传统的方法:

if(!user.HasPermission(Actions.UpdateRecord))
{
 // code to update record
}

我的应用程序上的大量权限。

我正在寻找一种以有效和(如果可能)优雅方式检查权限的方法。 在这种情况下,每个权限中都有多个操作。

2 个答案:

答案 0 :(得分:1)

如何在数据访问对象上放置装饰器。装饰器模式对于处理权限等操作非常有用。您的dataAccess图层可以只进行数据访问,然后使用仅处理权限和权限的内容来装饰这些类。

非常优雅......

http://en.wikipedia.org/wiki/Decorator_pattern

答案 1 :(得分:0)

有很多方法可以做到这一点。重要的是,您希望封装检查权限的问题。一种方法是使用策略模式。将操作封装在类中,并通过工厂方法获取类。工厂可以进行安全检查,并为不允许的操作返回不同的策略。

例如:

public abstract class SecureAction
{
    public void PerformAction();
}

public class UpdateRecords : SecureAction
{
    public void PerformAction()
    {
        //code to do the update
    }
}

public class DoesNotHavePermissionAction : SecureAction
{
    public void PerformAction()
    {
        //code to handle missing permissions
    }
}

public class SecureActionFactory
{
    public void GetUpdateRecordsAction(User user)
    {
        if(user.HasPermissions(Actions.UpdateRecord)) {return new UpdateRecordsAction();}

        return new DoesNotHavePermissionAction();
    }
}