我有一个具有 3 个不同登录名的应用程序(3 个不同的仪表板)。为了不编写重复的代码,我创建了一个适配器和一个插件来登录。
现在我如何管理 3 个不同的会话。如果我登录登录 1 也必须在仪表板 2 仪表板 3 上登录,但只能在仪表板 1 上登录。
我该如何处理?多会话多登录。
我有一个具有 3 个不同登录名的应用程序(3 个不同的仪表板)。为了不编写重复的代码,我创建了一个适配器和一个插件来登录。
现在我如何管理 3 个不同的会话。如果我登录登录 1 也必须在仪表板 2 仪表板 3 上登录,但只能在仪表板 1 上登录。
我该如何处理?多会话多登录。
这与身份验证(或登录:知道用户的身份是什么)无关,而是授权(或访问:用户有权访问此页面)。
您不应该使用不同的登录名、不同的会话等来管理授权。只需为用户使用单一身份并使用授权进行访问。以 ACL 或 RBAC 为例,两者都在Zend\Permission
.
有了这些权限系统,你可以说:这个用户 X 被允许访问仪表板 1 和 3。用户 Y 被允许访问 1 和 2。用户 Z 只被允许访问仪表板 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)在登录时将此整数添加到会话中,如果没有,则在每个仪表板上检查权限号允许访问,然后您重定向到登录或主页。