我们正在使用 Zend 框架和 Mysql 开发一个 Web 应用程序。
目前,帐户通过电子邮件地址是唯一的。我们希望能够允许一个帐户的管理员向另一个帐户的管理员授予访问权限。此人将成为关联帐户的“用户”。然后,帐户持有者将登录其管理员帐户,然后选择他们想要访问的链接帐户。
请注意:访问只能是一种方式。授予帐户 2 访问权限的帐户 1 不应能够访问帐户 2。只有帐户 2 可以访问帐户 1。如果帐户 1 想要访问帐户 2,则帐户 2 必须授予帐户 1 访问权限。
解决这个问题的最佳方法是什么?
最佳答案
我认为尝试将权限与帐户绑定(bind)是您的问题,您需要添加第二个“层”。让我们继续以 Google Analytics 为例:
假设 Joe Bloggs 想使用 Google Analytics。他首先必须创建一个 Google 帐户(假设他还没有)。然后,他为其网站创建了一个 Google Analytics 帐户。假设 Joe 然后想要授予 Jane Smith 访问权限,我们假设她已经拥有一个 Google 帐户。为了授予她访问权限,他所做的只是授予她 Google 帐户访问他的网站的权限,而他并没有授予她访问他的 Google 帐户的权限。
Zend_Acl 是基于角色的,所以让我们尝试将 ZF 概念应用到这个示例中。 GA 中的用户管理屏幕允许您授予用户“仅查看报告”访问权限或“帐户管理员”权限。因此,您需要在 Zend_Acl 中为每个访问级别定义一个角色:
$acl = new Zend_Acl();
$acl->addRole(new Zend_Acl_Role('guest'));
$acl->addRole(new Zend_Acl_Role('admin'), 'guest');
addRole 上的第二个参数表示该角色应继承指定的其他角色的所有权限。所以我上面所做的是定义两个角色:guest 和 admin;并表示管理员应该继承访客拥有的所有权限。
然后您就拥有了“资源”,即可以访问的内容。因此,我们将定义一种用于报告,另一种用于用户管理:
$acl->add(new Zend_Acl_Resource('reports'));
$acl->add(new Zend_Acl_Resource('users'));
然后,我们将向“访客”授予对报告的访问权限,并向用户授予“管理员”访问权限:
$acl->allow('guest', 'reports');
$acl->allow('admin', 'users');
然后在相关的 Controller (或插件,或任何地方)中您可以检查权限:
public function reportsAction()
{
[...]
// assume $role contains the role of the currently logged in user
if (!$acl->isAllowed($role, 'reports')) {
// show a permissions error
}
}
public function usersAction()
{
[...]
if (!$acl->isAllowed($role, 'users')) {
// permissions error
}
}
就将其存储在 MySQL 中而言,您只需要一个链接用户、站点(在本例中)和角色的查找表:
userID | siteID | role
1 1 admin
2 1 guest
关于mysql - 授予用户访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3700144/