如何为管理员和经理转移SonataAdminBundle

时间:2017-03-05 07:45:17

标签: php symfony sonata-admin symfony-sonata

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

我现在正在通过SonataAdminBundle管理实体并习惯它。 我想向前迈进一步。

我想让管理员和用户通过sonataadminbundle

编辑实体

[例如]

我有这样的表/实体。

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

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

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

如果我在Controller中从头开始编辑/更新/列表脚本。 这很容易实现。

然而,我认为这就像无用的工作,因为SonataAdminBundle的UI比我从头开始做的更好。

那么,有没有人知道这种想法的适当方式? 或者将SonataAdminBundle用于用户和管理员

是不明智的

我希望让用户看到只有熊相关的表格。

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

起初我正在努力 public function configureListFields(ListMapper $listMapper) 但是这段代码只被调用一次。 我无法找到正确的答案。

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

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

1 个答案:

答案 0 :(得分:1)

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

例如,您可以使用:

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

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

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