mysql - 授予用户访问权限

标签 mysql zend-framework

我们正在使用 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/

相关文章:

python - Django -> 无法解析关键字错误,但字段位于回溯中​​的选项中

php - 如何在 zend framework 2 语法中写在 CSS 行下面?

zend-framework - zend 框架自定义验证类

php - 为什么这个查询返回 0 行?

php - zend 框架中函数 getBaseUrl() 的问题

c# - 添加 ADO.NET 实体模型崩溃

php - html php mysql 如何实现分页

php - 在 MySQL JSON 字段的数组中搜索值 (Laravel/Lumen)

尝试添加外键时mysql出错

php - 如何最好地在 Zend Framework 中添加此 Action Helper 路径