[英]Symfony2 Sonata Admin Bundle as 'frontend'
我们正在一个看起来像这样的项目中运行:
客户可以登录可以在其中编辑信息的控制面板。 他们编辑的信息将由其他软件通过REST API提取(这已经可以在以前的版本中使用了)。
实际上,我们应用程序的基础实际上与SonataAdminBundle相同。 但是据我所知,我无法过滤用户登录SonataAdminBundle中查看的数据。
例如:
仅使用SonataAdminBundle是否可能? 还是我们必须创建自己的软件才能做到这一点?
我知道我们必须创建所有不同的多通或单通关系,但这不是问题。 主要问题是,我可以按当前登录的用户筛选数据吗? 并且以管理员或超级管理员身份登录时,无需应用任何数据过滤器。
提前致谢!
是的,只能使用SonataAdminBundle。
首先,用户通过不同的列表视图访问数据,因此您需要覆盖Admin类的createQuery方法以显示正确的Customer。
(不要忘记注入@ security.context服务)
public function createQuery($context = 'list')
{
$query = parent::createQuery($context);
if (!$this->isGranted('ROLE_SUPER_ADMIN') || !$this->isGranted('ROLE_ADMIN'))
{
$user = $this->securityContext->getToken()->getUser();
$query->
// your custom query.
;
}
return $query;
}
然后,您需要对所有其他操作(显示,编辑和删除)进行证券化,以防止用户访问其他客户。
为此,我将覆盖控制器的操作,并在调用父方法之前添加自己的逻辑。
public function editAction($id = null)
{
// check if the user can access to the current customer
// if not throw new AccessDeniedException();
return parent::editAction($id);
}
也许有更好的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.