首页 文章

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

提问于
浏览
0

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

我的意思是说:

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

即:

  • 我有 table "elisseii_myplugin_movies" .

  • 在"Movies"模型中,我创建了一个名为"groups"的关系字段 .

  • 并创建了表"elisseii_myplugin_movies_groups" .

  • 在“电影”模型中使用$ belongsToMany .

public $belongsToMany =[ 

    'groups' =>[ 
        'Elisseiidev\MyPlugin\Models\Groups', 
        'table' => 'elisseii_myplugin_movies_groups', 
        'order' => 'name'
    ]

];
  • 插件中的“组”模型使用标准表“backend_user_groups” .

现在记录包含有关附加组的信息 . 你可以看到video tutorial,它说的是关于它的)

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

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

1 回答

  • 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'
        ]
    ];
    

    让我知道它是否有效 .

相关问题