0

我有一个具有 3 个不同登录名的应用程序(3 个不同的仪表板)。为了不编写重复的代码,我创建了一个适配器和一个插件来登录。

现在我如何管理 3 个不同的会话。如果我登录登录 1 也必须在仪表板 2 仪表板 3 上登录,但只能在仪表板 1 上登录。

我该如何处理?多会话多登录。

4

2 回答 2

2

这与身份验证(或登录:知道用户的身份是什么)无关,而是授权(或访问:用户有权访问此页面)。

您不应该使用不同的登录名、不同的会话等来管理授权。只需为用户使用单一身份并使用授权进行访问。以 ACL 或 RBAC 为例,两者都在Zend\Permission.

有了这些权限系统,你可以说:这个用户 X 被允许访问仪表板 1 和 3。用户 Y 被允许访问 1 和 2。用户 Z 只被允许访问仪表板 1。

于 2013-06-19T14:09:05.877 回答
1

您应该使用 Zend\Permissions\Acl。检查“角色之间的多重继承”部分。 http://framework.zend.com/manual/2.0/en/modules/zend.permissions.acl.intro.html

use Zend\Permissions\Acl\Acl;
use Zend\Permissions\Acl\Role\GenericRole as Role;
use Zend\Permissions\Acl\Resource\GenericResource as Resource;

$acl = new Acl();

$acl->addRole(new Role('guest'))
    ->addRole(new Role('member'))
    ->addRole(new Role('admin'));

$parents = array('guest', 'member', 'admin');
$acl->addRole(new Role('someUser'), $parents);

$acl->addResource(new Resource('someResource'));

$acl->deny('guest', 'someResource');
$acl->allow('member', 'someResource');

echo $acl->isAllowed('someUser', 'someResource') ? 'allowed' : 'denied';

但是如果您不想使用 ACL。那么你为什么不在你的登录表中添加一个权限列一个整数(我认为是 1,2,3...最多 7)在登录时将此整数添加到会话中,如果没有,则在每个仪表板上检查权限号允许访问,然后您重定向到登录或主页。

于 2013-06-19T18:31:36.080 回答