Php 在雄辩的模型中处理ACL的最佳模式或方法是什么?

Php 在雄辩的模型中处理ACL的最佳模式或方法是什么?,php,laravel,design-patterns,Php,Laravel,Design Patterns,我正在使用Laravel创建一个RESTAPI,其中基于用户角色的端点有多个参数 当前正在使用if条件在服务中对此进行检查 类用户服务 { 公共函数更新(数组$attribute,$userId) { $userRepository=app(\app\Repositories\UserRepositoryInterface::class); $user=$userRepository->get($userId); $AllowedUpdateableFieldforTeachers=[“姓名”、

我正在使用Laravel创建一个RESTAPI,其中基于用户角色的端点有多个参数

当前正在使用if条件在服务中对此进行检查

类用户服务
{
公共函数更新(数组$attribute,$userId)
{
$userRepository=app(\app\Repositories\UserRepositoryInterface::class);
$user=$userRepository->get($userId);
$AllowedUpdateableFieldforTeachers=[“姓名”、“年龄”、“毕业时间”];
$AllowedUpdateableFieldForSupervisor=[“姓名”、“年龄”、“毕业时间”、“余额”、“工资];
如果($user->role=='teacher'){
$userRepository->update(Arr::only($attribute,$allowedUpdateableFieldforTeachers),$userId);
}
如果($user->role=='supervisor'){
$userRepository->update(Arr::only($attribute,$allowedUpdateableFieldforSupervisor),$userId);
}
}
}
然而,它违反了单一责任原则。
那么,处理这个问题的最佳实践/模式是什么呢。

SRP并不适用于软件中的所有类

对于一个典型的类,应该应用SRP,因为它增加了类的可重用性。没有人希望重用一个有两个职责的类,而他只需要一个。如果他接受使用这个类,那么每次更新不需要的职责代码时,对他来说都会非常烦人

但是,对于您的软件所在的类,SRP不适用。在这里,您可以使用多个典型类,以某种方式组合它们来处理用户的请求。通常不需要在边界处重用类。因此,无需对其应用SRP。换句话说,这些类旨在承担多重责任

您的
UserService
类就是这样一个地方。所以,别担心


您可以阅读有关SRP的更多信息。在我看来,这是关于这一原则的最好的文章。

SRP并不适用于软件中的所有类

对于一个典型的类,应该应用SRP,因为它增加了类的可重用性。没有人希望重用一个有两个职责的类,而他只需要一个。如果他接受使用这个类,那么每次更新不需要的职责代码时,对他来说都会非常烦人

但是,对于您的软件所在的类,SRP不适用。在这里,您可以使用多个典型类,以某种方式组合它们来处理用户的请求。通常不需要在边界处重用类。因此,无需对其应用SRP。换句话说,这些类旨在承担多重责任

您的
UserService
类就是这样一个地方。所以,别担心

您可以阅读有关SRP的更多信息。在国际海事组织,这是关于这一原则的最好的文章