使用需要角色来获取服务中的权限的函数

时间:2012-05-16 17:48:55

标签: c# windows-services

我有很多服务,每项服务都有很多功能。几乎每个功能都需要一定的“角色”。当前用户需要执行它。

有没有比在每个方法的开头添加以下代码更好的方法?如果我可以用属性装饰这些方法会很好,但我不确定如何在这里应用它们。

public void CreateTruck(TruckDto dto)
{
    var currentUser = GetCurrentUser();
    if (!currentUser.Can("CreateTruck"))
        throw PermissionException("...");

    // otherwise proceed normally
}

1 个答案:

答案 0 :(得分:0)

我发现这种情况有两种方式:

1 - 你不会改变任何东西,或者只是简单地改变它:

EnsureUserCan("CreateTruck");

在内部有这个方法调用:

protected void EnsureUserCan(string role)
{
    if(!GetCurrentUser().Can(role))
       throw PermissionException("...");
}

2 - 你转向一个调用者模式:

var myNewTruck = ServiceInvoker.Invoke<TruckService>(x => x.CreateTruck(dto));

public class ServiceInvoker
{
    public ReturnType Invoke<ServiceType, ReturnType>(Expression<Func<ServiceType, ReturnType>> methodExpression)
    {
        // blah blah
        var myService = IoC.Resolve<ServiceType>();

        return methodExpression.Compile()(myService); // etc
    }
}

并且您的invoke方法检查属性的表达式,因此可以基于属性抛出异常。这看起来有点矫枉过正。