十月CMS - 仅显示附加到当前用户组的记录

时间:2017-12-19 13:38:29

标签: octobercms octobercms-plugins octobercms-backend

我只需要显示模型中附加到某些组的那些记录。 (“belongsToMany”关系)。 (电影模型插件列表的后端页面) 我想获取当前用户的组并创建查询。

我的意思是:

我使用“关系”字段将记录附加到组。

即:

  • 我有桌子“elisseii_myplugin_movies”。
  • 在“电影”模型中,我创建了一个名为“groups”的关系字段。
  • 并创建了表“elisseii_myplugin_movies_groups”。
  • 在“电影”模型中使用$ belongsToMany。

    public $belongsToMany =[ 
    
        'groups' =>[ 
            'Elisseiidev\MyPlugin\Models\Groups', 
            'table' => 'elisseii_myplugin_movies_groups', 
            'order' => 'name'
        ]
    
    ];
    
  • 插件中的“Groups”模型使用标准表“backend_user_groups”。

现在记录包含有关附加组的信息。 你可以看到关于它的video tutorial

我需要用户无法编辑不属于他们组的记录。 代码必须是动态的。

我需要一个详细的答案,因为我正在学习)) 提前感谢您的时间。

1 个答案:

答案 0 :(得分:0)

您需要将此方法添加到控制器,使用列表行为意味着显示列表。

public function listExtendQuery($query) {
    $user = \BackendAuth::getUser();
    $codes = $user->groups->pluck('code')->toArray();
    $query->whereHas('groups', function ($q) use ($codes){
        $q->whereIn('groups.code', $codes);
    });
}

listExtendQuery方法将使用我们为用户显示的列表自定义条件扩展查询。

这里我们获取Be user然后我们提取code因为它将是数组,用户可以有多个组。

现在你的Movies表格有groups关系,所以它可以有多个组,所以现在我们可以检查一下,如果该电影组代码在用户中可用,那么我们就可以向他显示列表项。

感染您不需要创建新模型(Elisseiidev\MyPlugin\Models\Groups),如果您不需要其他功能,可以直接使用内置模型。

你可以像

那样简单地做
public $belongsToMany = [
    'groups' => [
         Backend\Models\UserGroup::class, 
        'table' => 'elisseii_myplugin_movies_groups',
        'order' => 'name'
    ]
];

让我知道它是否有效。