我需要在PHP中创建一个系统,该系统将在主页上使用多个链接,但并不是所有用户都可以根据用户登录的组来查看这些链接:
但链接可能不会分散,必须包含在主页中,如果您不在正确的组中,则必须隐藏。
有人可以举例说明如何在PHP中完成这样的事情,或者向我发送正确的方向吗?
答案 0 :(得分:2)
您所寻找的内容通常被称为AC (access control)。其中最受欢迎的是RBAC (role based access control),因为它允许您将用户/帐户分组并为这些群组授予特定权限。
让我们完成最小设置的设计步骤:
基本上你所说的是,你已经为你的用户设置了某种帐户(Guest除外,因为那是一个未登录的用户) 现在RBA中的角色基本上是具有或没有特定权限的组。
因此产生以下关系:
现在让我们继续,为了实现它,您需要具备该系统的哪些部分的数据
这导致以下表格:
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:提供的维基文章非常理论化。您可能只想谷歌搜索“php访问控制系统”或类似的查询,以便开始使用其他人提出的解决方案。
答案 1 :(得分:1)
为每个用户提供一个数字,以确定他们属于哪个类别。例如,客人将是1,员工将是2,经理将是3.然后当他们登录时,您将其存储在会话中。
要显示任何给定类别的链接,您可以执行此操作。只需更改每个类别的数量。
<?php if( $_SESSION[ 'user' ][ 'category' ] == 3 ) : ?>
<a href="www.google.co.uk">Link for a manager</a>
<?php endif; ?>
答案 2 :(得分:1)
假设您已经设置了用户角色和某种类,您可以通过以下方式轻松完成此操作:
if($users->role($userid) == "some role") //can be int or string which ever way you set it up
{
echo "a href='somelink.php'> Click to access</a>";
}