授予用户访问权

问题描述:

我们正在使用Zend框架和Mysql开发Web应用程序。授予用户访问权

目前,帐户是唯一的电子邮件地址。我们希望能够允许帐户的管理员向另一个帐户的管理员授予访问权限。此人将成为关联账户的“用户”。账户持有者然后登录到他们的管理员账户,然后选择他们想要访问哪个链接账户。

请注意:访问只能是一种方式。帐户1授予对帐户2的访问权限,但不应该能够访问帐户2.只有帐户2才能访问帐户1.如果帐户1想要访问帐户2,则帐户2必须授予帐户1的访问权限。

这是怎么回事?

+0

简单英语:这是否意味着您需要创建用户组? – takeshin 2010-09-13 13:26:52

+0

这真的是特定于mysql吗?大多数Web应用程序在应用程序级别实施“帐户”,并仅将数据库用作数据存储。同样,你似乎在你的问题中以多种方式使用用户/管理员。一些更多的细节将会更好,更好的具体例子。但实质上你似乎在谈论传递权限 – 2010-09-13 13:34:10

+0

让我看看我能否更清楚。 “管理员”是拥有该账户的人。 “用户”是被授权使用该帐户但没有管理员权限的人。 可以说我们有两个账户。根据电子邮件地址,帐户是唯一的。 帐户1希望帐户2管理他们的帐户。为了发生这种情况,账户1必须授权其他账户。这样做将允许帐户2登录到他们自己的帐户,然后单击链接来管理帐户1. 此概念与Google Analytics和Google Adwords帐户管理的工作原理非常相似。 – user387990 2010-09-13 15:01:20

我认为试图将权限绑定到帐户是您的问题,您需要添加第二个“图层”。让我们继续以Google Analytics为例:

假设Joe Bloggs想要使用Google Analytics。他首先必须创建一个Google帐户(假设他还没有)。然后,他为其网站创建了Google Analytics帐户。说乔然后想要访问简史密斯,让我们假设她已经有一个谷歌帐户。为了让她访问所有他正在做的是让她的谷歌帐户访问他的网站,他没有让她访问他的谷歌帐户。

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'); 

然后在相关的控制器(或插件或其它地方),你可以检查权限:

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