如何在自己的插件中添加仅编辑一条记录的权限

How to add permission to edit only one record in own plugin

我有自己的插件来存储酒吧,我想允许酒吧所有者管理他们的网站。我不知道该怎么做。如何为特定的后端用户只显示他的记录?

假设您有一个 User 模型和一个 Pub 模型,接下来就是在它们之间创建关系。一对多关系很适合这里,因为一个用户可以拥有一个或多个酒吧,但一个酒吧可以属于一个用户。

在用户模型中

public function pubs()
    {
        return $this->hasMany(Pub::class);
    }

在酒吧模式中

public function owner()
    {
        return $this->belongsTo(User::class);
    }

检索属于用户的发布

$pubs = Auth::user()->pubs;

$pubs = Pub::where('user_id', Auth::user()->id)->get();

以类似的方式,您可以通过检查用户 ID 是否相同来检查请求的发布者是否为所有者。

你有两个选择。

  1. 您可以将 user_id(或 owner_id)列添加到 pubs table。这意味着每个酒吧都属于一个用户。您还必须添加一种定义管理员用户的方法。最简单的解决方案是将 is_admin 列添加到 users table。下一个最简单的解决方案是在 users 中有一个 role 列,其中一个角色是 "admin"(或代表 "admin" 的数字)。然后您将使用一些不错的应用程序代码来完成所有这些工作。

  2. 你可以创建一个 user_pub table 来作为 link table 允许 table 之间的多对多关系=14=] 和 pubs。而且您必须确保(在应用程序代码中)非管理员用户没有 link 到多个酒吧。

选项 2 更灵活,但如果您不需要那么大的灵活性(现在或将来),选项 1 更简单。