我想在我的索纳塔管理仪表板上使用角色处理器安全。我使用Symfony 2.3。索纳塔管理员一般角色
在医生,我有:
每个权限相对于管理员:如果您尝试在 FooAdmin(声明为sonata.admin.demo.foo服务),以获得一个列表,将索纳塔 检查用户是否具有
ROLE_SONATA_ADMIN_DEMO_FOO_EDIT
角色。
按我的理解,如果我有服务,如:
sonata.admin.article
sonata.admin.user
sonata.admin.tag
然后我需要创建一个编辑的角色,作为一个列表这3个元素:
ROLE_SONATA_ADMIN_ARTICLE_EDIT
和ROLE_SONATA_ADMIN_USER_EDIT
和ROLE_SONATA_ADMIN_TAG_EDIT
但我宁愿希望创建访问更多的武将,例如,在我的情况下,简单地做:ROLE_SONATA_ADMIN_EDIT
而不是三的名单。
有没有一个简单的方法来做到这一点与此捆绑?
# AppBundle/Security/Handler/MyRoleSecurityHandler.php
namespace AppBundle\Security\Handler;
use Sonata\AdminBundle\Admin\AdminInterface;
use Sonata\AdminBundle\Security\Handler\RoleSecurityHandler;
class MyRoleSecurityHandler extends RoleSecurityHandler
{
/**
* {@inheritDoc}
*/
public function getBaseRole(AdminInterface $admin)
{
return 'ROLE_SONATA_ADMIN_%s';
}
}
覆盖与此相关的类索纳塔服务:
# AppBundle/Resources/config/services.yml
services:
#...
sonata.admin.security.handler.role:
class: AppBundle\Security\Handler\MyRoleSecurityHandler
public: false
arguments: [@security.context, [ROLE_SUPER_ADMIN]]
记得在您的层次结构声明这些角色: