奏鸣曲 |交响乐 3 |根据用户角色配置路由
Sonata | Symfony 3 | Configure routes in function of user roles
我尝试根据用户角色配置路由。这就是我所做的:
服务:
admin.group:
...
calls:
- [ setTokenStorage, [ "@security.token_storage" ] ]
管理员 class:
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
糟糕,我以为 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所说,这不是一个好主意。为了让我的代码工作,你必须每次都清除缓存。太糟糕了!
我尝试根据用户角色配置路由。这就是我所做的:
服务:
admin.group:
...
calls:
- [ setTokenStorage, [ "@security.token_storage" ] ]
管理员 class:
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
糟糕,我以为 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所说,这不是一个好主意。为了让我的代码工作,你必须每次都清除缓存。太糟糕了!