Php 用于处理基于权限的函数的抽象类
我构建了一个抽象的用户类,它由Admin、Manager和Employee扩展。用户包含所有用户需要的所有内容,并根据实例使用不同的逻辑抽象每个用户处理的所有内容。当我有一个Admin或Manager类将以完全相同的方式处理的功能时,我的困惑就出现了,但员工将根本无法访问这些功能 例如,管理用户而不是管理用户本身应该只限于管理员和经理,而员工永远不能这样做。我想避免复制/粘贴Admin和Manager类中完全相同的逻辑,所以我应该创建一个单独的私有函数并将其移到User类,并让Admin/Manager类从那里调用它吗Php 用于处理基于权限的函数的抽象类,php,permissions,polymorphism,abstract,Php,Permissions,Polymorphism,Abstract,我构建了一个抽象的用户类,它由Admin、Manager和Employee扩展。用户包含所有用户需要的所有内容,并根据实例使用不同的逻辑抽象每个用户处理的所有内容。当我有一个Admin或Manager类将以完全相同的方式处理的功能时,我的困惑就出现了,但员工将根本无法访问这些功能 例如,管理用户而不是管理用户本身应该只限于管理员和经理,而员工永远不能这样做。我想避免复制/粘贴Admin和Manager类中完全相同的逻辑,所以我应该创建一个单独的私有函数并将其移到User类,并让Admin/Man
abstract class User
{
public $username;
public $userId;
public $company;
public $error;
private function updateUser($user)
{
// Logic for saving the user info
}
....
}
class Admin extends User
{
public function updateUser($user)
{
parent::updateUser($user)
}
....
}
class Manager extends User
{
public function updateUser($user)
{
parent::updateUser($user)
}
....
}
class Employee extends User
{
public function updateUser($user)
{
$this->error = "Invalid Permissions";
}
....
}
这应该以不同的方式处理吗?谢谢。您可以通过检查将逻辑移动到用户基类中,以确保指定的用户是经理或管理员,但您可以在以后添加不同的“类”用户,这些用户可能需要相同的功能,在这种情况下,您编写的代码需要更新
我的建议是在Manager/Admin用户和User抽象类之间创建一个新的抽象类,可能类似于
UserEditor
UserEditor
扩展用户并为管理员/管理员提供更新其他用户的功能,管理员/管理员从UserEditor而不是您的用户类进行扩展。您可以通过检查将逻辑移到用户基类中,以确保指定的用户是管理员或管理员,但是您可以在以后添加不同的“类”用户,这些用户可能需要相同的功能,在这种情况下,您编写的代码将需要更新
我的建议是在Manager/Admin用户和User抽象类之间创建一个新的抽象类,可能类似于
UserEditor
UserEditor
扩展用户并为管理员/经理提供更新其他用户的功能,管理员/经理从UserEditor而不是您的用户类进行扩展。如果您这样做,我认为您应该有一个ACL
类,并在函数中执行一个签入,这样您就不需要重写任何内容
abstract class User
{
public $username;
public $userId;
public $company;
public $error;
private final function updateUser($user)
{
if(ACL::checkIfUserHasPermissionToUpdateUser($this->userId){
//Perform the update, this code will be executed only if the user
//is a Manager or an Admin, but the logic is delegated to the ACL class
}
}
}
如果您这样做,我认为您应该有一个
ACL
类,并在函数中执行检查,这样您就不需要重写任何内容
abstract class User
{
public $username;
public $userId;
public $company;
public $error;
private final function updateUser($user)
{
if(ACL::checkIfUserHasPermissionToUpdateUser($this->userId){
//Perform the update, this code will be executed only if the user
//is a Manager or an Admin, but the logic is delegated to the ACL class
}
}
}
我确实在我用于页面权限的站点中内置了ACL,所以这不会是一个问题。当然,我更喜欢使用实例来指示是否可以执行操作。你还会推荐使用watcher的解决方案进行ACL检查吗?我确实在网站中内置了ACL,我使用它来获得页面权限,所以这不会是一个问题。当然,我更喜欢使用实例来指示是否可以执行操作。您仍然建议使用watcher的解决方案进行ACL检查吗?