Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony2奏鸣曲管理包as';前端&x27;_Symfony_Sonata Admin_Sonata User Bundle - Fatal编程技术网

Symfony2奏鸣曲管理包as';前端&x27;

Symfony2奏鸣曲管理包as';前端&x27;,symfony,sonata-admin,sonata-user-bundle,Symfony,Sonata Admin,Sonata User Bundle,我们正在运行一个类似这样的项目: 客户可以登录到控制面板,在其中他们可以编辑信息。 他们编辑的信息将由其他软件通过RESTAPI提取(此allready在以前的版本中工作) 实际上,我们应用程序的基础实际上与SonataAdminBundle相同。但据我所知,我无法过滤用户登录的SonataAdminBundle中查看的数据 例如: User1、User2和User3是客户1的员工。他们只需要查看所有从Customer1添加的数据 当一个新客户Customer2添加到系统中时,也会创建一些用户

我们正在运行一个类似这样的项目:

客户可以登录到控制面板,在其中他们可以编辑信息。 他们编辑的信息将由其他软件通过RESTAPI提取(此allready在以前的版本中工作)

实际上,我们应用程序的基础实际上与SonataAdminBundle相同。但据我所知,我无法过滤用户登录的SonataAdminBundle中查看的数据

例如:

  • User1User2User3客户1的员工。他们只需要查看所有从Customer1添加的数据
  • 当一个新客户Customer2添加到系统中时,也会创建一些用户User10User11。他们只需要查看有关客户2的信息,而不需要查看客户1添加的信息(反之亦然)
仅使用SonataAdminBundle是否可以实现这一点?或者我们必须创建我们自己的软件来实现这一点

我知道我们必须建立各种不同的多对多或一对多关系,但这不是什么问题。主要问题是,我可以按当前登录的用户筛选数据吗?当以管理员或超级管理员身份登录时,不必应用任何数据筛选器


提前谢谢

是的,可以只使用SonataAdminBundle

首先,用户通过不同的列表视图访问数据,因此需要重写Admin类的createQuery方法以显示正确的客户

(别忘了注入@security.context服务)

然后,您需要对所有其他操作(显示、编辑和删除)进行安全保护,以防止用户访问其他客户

为此,我覆盖控制器的操作,并在调用父方法之前添加自己的逻辑

public function editAction($id = null)
{
    // check if the user can access to the current customer
    // if not throw new AccessDeniedException();

    return parent::editAction($id);
}

也许有更好的方法..

但有些事情不可能只通过ACL实现?我找到了一个可能满足我需要的捆绑包(),但我认为我的安全性不足,因为当普通用户具有角色:role\u ADMIN时,我只在仪表板中获取实体。当用户具有角色:role\u user和role\u[BUNDLENAME]\u[ENTITY]\u[GUEST/STAFF/EDITOR/ADMIN]时,我认为我应该有权查看实体列表,但是我看不到任何东西。所有用户都需要有ROLE_ADMIN和ROLE_SONATA_ADMIN角色,否则他们将无法使用SONATA。无法使用角色或acl限制对特定条目的访问,只能为整个实体设置权限。
public function editAction($id = null)
{
    // check if the user can access to the current customer
    // if not throw new AccessDeniedException();

    return parent::editAction($id);
}