您要查找的内容通常称为AC (access control)。最流行的一种是RBAC (role based access control),因为它允许您将您的用户/帐户分组并赋予这些组一定的权限。
让我们看一下最小设置的设计步骤:
基本上你的意思是,你已经为你的用户拥有了某种帐户(Guest 除外,因为那是一个未登录的用户)
现在 RBA 中的角色基本上是具有或不具有某些特权的组。
因此导致以下关系:
- 零对许多帐户属于零对许多角色(->组,例如“管理员”、“经理”等)
- 从零到多的角色具有从零到多的特权/权限(例如“访问经理部分”或“更新此记录”)
现在让我们继续,为了实现它,您需要拥有该系统哪个部分的哪些数据
- 通常,每个帐户的帐户表中都有一个 ID。
- 角色通常具有 ID 和名称。
- 权限通常至少有一个类似常量的标识符(它应该是主键,因此它是唯一的 --- 例如 ACCESS_MANAGER - 您可以在下面的代码示例中看到为什么这很有用。它可以用来查找)和名称
这导致以下表格:
Account(AccountID (PK), ...)
Account_Role(AccountID (PK, FK), RoleID (PK, FK))
Role(RoleID (PK), name)
Role_Privilege(RoleID (PK, FK), PrivilegeID (PK, FK));
Privilege(identify (PK), name)
现在您可以管理这些角色所拥有的角色和权限。
例如,如果您想检查当前用户是否具有特定权限,您可以询问您的数据库。
if(
$this
->getCurrentUser() //would return a dummy guest user with no roles assigned if no user is logged in
->hasPrivilege('ACCESS_MANAGER') //joins account via account_role to role to role_privilege and finally to privilege
) { /*display only links a manager would see*/ }
if($this->getCurrentUser()->hasPrivilege('ACCESS_ADMIN')) { /*display only links an admin would see*/ }
PS:提供的 wiki 文章非常理论化。您可能只想在 Google 上搜索“php 访问控制系统”或类似的查询,以便开始使用其他人提出的解决方案。