使用需要角色才能获得服务权限的函数

本文关键字:服务 权限 函数 角色 | 更新日期: 2023-09-27 18:34:27

>我有很多服务,每个服务都有许多功能。几乎每个函数都需要当前用户执行它所需的特定"角色"。

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

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

使用需要角色才能获得服务权限的函数

我有两种方式看到这种情况:

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 方法检查表达式中的属性,因此可以根据属性引发异常。不过,这似乎有点矫枉过正。