奏鸣曲 | Symfony 3 |根据用户角色配置路由

Posted

技术标签:

【中文标题】奏鸣曲 | Symfony 3 |根据用户角色配置路由【英文标题】:Sonata | Symfony 3 | Configure routes in function of user roles 【发布时间】:2016-10-26 19:00:31 【问题描述】:

我尝试根据用户角色配置路由。这就是我所做的:

服务:

admin.group:
        ...
        calls:
            - [ setTokenStorage, [ "@security.token_storage" ] ]

管理类:

public function setTokenStorage (TokenStorageInterface $tokenStorage) 
    $this->tokenStorage = $tokenStorage;

    $this->user = null;
    $token = $this->tokenStorage->getToken();
    if (null !== $token && is_object($token->getUser())) 
        $this->user = $token->getUser();
    


protected function configureRoutes(RouteCollection $collection)

    if ($this->user && $this->user->hasRole('ROLE_SUPER_ADMIN')) 
        $collection->remove('delete');
    
    else 
        $collection->clearExcept(array('list'));
    

我遇到了崩溃:

An exception has been thrown during the rendering of a template ("Unable to generate a URL for the named route "sonata_group_edit" as such route does not exist.") in SonataAdminBundle:CRUD:base_list_field.html.twig at line 23.

好像我们在configureRoutes中传了两次,第一次user为null,第二次user不为null。第二次 $this->user->hasRole('ROLE_SUPER_ADMIN') 为真,但它会导致此崩溃。

我没有使用 SonataUserBundle,因为它不适用于 Symfony 3。

我该怎么做? TY

【问题讨论】:

【参考方案1】:

我的错,我以为 Sonata Security 不会做这项工作,但它确实做到了!

我创建了特定的角色:

    ROLE_THEME_VIEWER:
        - ROLE_ADMIN_THEME_LIST
    ROLE_GROUP_VIEWER:
        - ROLE_ADMIN_GROUP_LIST
    ROLE_RULES_VIEWER:
        - ROLE_ADMIN_RULES_LIST

还有:

    ROLE_ADMIN:       [..., ROLE_THEME_VIEWER, ROLE_GROUP_VIEWER, ROLE_RULES_VIEWER]
    ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_SONATA_ADMIN, ROLE_ALLOWED_TO_SWITCH]

https://sonata-project.org/bundles/admin/master/doc/reference/security.html

如果您仍想使用“configureRoutes”来检查访问权限,您应该阅读以下内容:

https://github.com/sonata-project/SonataAdminBundle/issues/2590

正如 pulzarraider 所说,这不是一个好主意。为了使我的代码正常工作,您必须每次都清除缓存。真是太糟糕了!

【讨论】:

以上是关于奏鸣曲 | Symfony 3 |根据用户角色配置路由的主要内容,如果未能解决你的问题,请参考以下文章

以奏鸣曲管理员的编辑形式为用户设置角色

Symfony 奏鸣曲 - 形式映射器

Symfony 3 和奏鸣曲管理员

配置文件编辑时奏鸣曲用户捆绑错误

将 symfony 2.8 更新到 3.* ,奏鸣曲错误

Symfony 3.2.7 和奏鸣曲媒体包安装