具有多会话的多登录ZF2

时间:2013-06-19 13:59:52

标签: authentication zend-framework2 zend-db zend-auth

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

现在我该如何管理3个不同的会话。如果我运行登录登录1还必须在仪表板2仪表板3上签名,但仅在仪表板1上签名。

我该如何处理?用于多重登录的多会话。

2 个答案:

答案 0 :(得分:2)

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

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

使用这些权限系统,您可以说:允许此用户X访问仪表板1和3.允许用户Y访问1和2.用户Z仅允许访问仪表板1.

答案 1 :(得分: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我认为)登录时将这个整数添加到一个会话中,并在每个仪表板上检查是否有权限号码允许访问然后您重定向到登录或主页。