使用需要角色才能获得服务权限的函数
本文关键字:服务 权限 函数 角色 | 更新日期: 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 方法检查表达式中的属性,因此可以根据属性引发异常。不过,这似乎有点矫枉过正。