如何为admin和manager分流SonataAdminBundle

How to divert the SonataAdminBundle for both admin and manager

我想知道基本的想法指南。

我现在正在通过 SonataAdminBundle 管理实体并习惯它。 我要进步一步。

我想让管理员和用户都通过 sonataadminbundle 编辑实体

[例如]

我有table/entity这样的。

Id |User  | data
1  |bear  | sarmon
2  |dog   | meat
3  |monkey| banana
4  |bear  | peanuts
5  |dog   | corn 

我(管理员)当然可以编辑 SonataAdminBundle admin_dashboard 中的实体。

但是我想让用户 'bear' 只编辑 1 行和 4 行。

如果我在 Controller 中从头开始制作 edit/update/list 脚本。 很容易实现。

但是,我认为这是无用的工作,因为 SonataAdminBundle 比我从头开始做的更好UI。

所以,有谁知道这种想法的合适方法吗?? 或者对用户和管理员都使用 SonataAdminBundle 是个坏主意??


我想让用户 bear 只看到与 bear 相关的表。

Id |User  | data
1  |bear  | sarmon
4  |bear  | peanuts

一开始我很纠结 public function configureListFields(ListMapper $listMapper) 然而这段代码只被调用一次。 我找不到正确的答案。

所以我想我需要把这种代码放在别的地方。

if ($user == bear){
array_push($table,$line);
}
else {
}

同时为用户和特权用户使用 AdminBundle 完全没问题。 您可以轻松地询问管理员当前登录的用户是否已被授予编辑第 1 行或第 4 行的权限。

例如你可以使用:

protected function configureFormFields(FormMapper $mapper)
{
    /* either identify your custom rows here or via ACL/ROLES */
    if (!$this->isGranted('EDIT')) {
      // not allowed
    }
}

出于安全考虑(并取决于您的用例),请注意,这不会阻止您的非特权用户 show/list 这些实体(因为上面的示例仅覆盖 form/edit掩码)。当然,您也可以将逻辑添加到这些方法中。

根据您的安全处理程序,您可以使用 symfony 支持的所有内容(角色、ACL 等)。 请在此处查看如何根据您的需要配置它:https://sonata-project.org/bundles/admin/3-x/doc/reference/security.html