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