哪一个是好的练习?将身份验证合并为管理员和用户的一个功能,或者将其分离


Which one is a good practice ? combine the authentication as one function for administrators and users , or separate it?

我有一个验证管理员登录的身份验证功能,我想将其与用户身份验证结合起来,因为它只需要简单的逻辑,但这是一个好的做法吗?将来/以后管理起来容易吗?

我认为这是一个非常好的实践。从长远来看,它可以让您对应用程序有更多的控制权。您可能想对ACL(访问控制列表)进行一些研究。

您基本上定义了一些角色——您可以将这些角色存储在数据库表中。让我们使用一个虚构的ACL库,假设您有5个角色:

$acl = new Acl;
$acl->addRole('guest');
$acl->addRole('user', 'guest');
$acl->addRole('staff', 'user');
$acl->addRole('admin', 'staff');
$acl->addRole('root', 'admin');

您已经可以看到:用户可以做客人能做的所有事情+更多。工作人员可以做用户能做的一切+更多。管理员(…)等。现在让我们定义一些资源:

$acl->addResource('website');
$acl->addResource('api', 'website');
$acl->addResource('cms', 'api');

类似的继承也在这里进行。然后分配一些权限:

$acl->allow('root', '*');
$acl->allow(array('admin', 'staff'), 'cms');
$acl->allow('user', 'api');
$acl->allow('guest', 'website');

已经看到可能性了吗?常客只能看到一个网页。登录的用户可以看到相同的网页,但有一些额外的内容,比如其他用户正在登录,并申请访问令牌来访问API。管理员;工作人员也可以做到这一切,但他们也可以访问CMS。你可以添加更多的资源和规则:工作人员可以编辑内容,但只有管理员才能编辑、发布和发布;删除内容。

<?php if ($acl->isAllowed('delete', $role)) { ?>
    <button name="delete">Delete</button>
<?php}?>

所以是的:对所有用户使用1个强身份验证系统是一种很好的做法,无论他们的用户级别如何。通过ACL,您可以控制谁可以在何时何地做什么。