如何限制数据透视表的访问?拉拉维尔

Posted

技术标签:

【中文标题】如何限制数据透视表的访问?拉拉维尔【英文标题】:How to limit access from pivot table? Laravel 【发布时间】:2018-10-01 17:01:24 【问题描述】:

我有桌子:

用户

身份证 姓名

公司

身份证 姓名

公司用户

company_id user_id

表格具有多对多关系。

由于这对我来说很复杂,当用户可以看到由该用户创建的公司时,我无法找到如何进行此限制的方法。 (可能经验不足)

现在我有了这个,但用户可以看到任何公司

公司控制器:

public function show($company_id)

    $company = Company::where('id', $company_id)->firstOrFail();

    return view('company.settings', compact('company'));

所以请提示我如何让用户只能看到该用户创建的公司。

【问题讨论】:

您是否在User 模型上定义了belongsToMany 关系? 公共函数公司() return $this->belongsToMany(Company::class, 'company_user'); 还有。 public function users() return $this->belongsToMany(User::class, 'company_user'); 我的错,您需要在Company 模型上使用它,您也有吗?另外你是什么意思“这个用户”?当前登录用户? 实际上关系有效,这不是我的问题 【参考方案1】:

由于是多对多关系,您可以将一个公司映射到多个用户,也可以将一个用户映射到多个公司。检查您是否没有错误地将公司分配给许多用户

上面的代码也可以这样写

public function show($company_id)

    $company = Company::findOrFail($company_id);

    return view('company.settings', compact('company'));

【讨论】:

在我的例子中,用户可以创建很多公司,他们可以将用户添加到公司,所以一个公司可以有很多用户,用户可以有很多公司。这就是为什么我与用户有关系 belongsToMay() 对公司也有同样的关系。我正在为此使用数据透视表【参考方案2】:

你可以这样做:

public function show($company_id)

    $company = auth()->user()->companies()->findOrFail($company_id);
    return view('company.settings', compact('company'));

它将公司范围限定为当前登录的用户(通过User 模型上的多对多关系)。如果没有找到,它将返回 404。

【讨论】:

以上是关于如何限制数据透视表的访问?拉拉维尔的主要内容,如果未能解决你的问题,请参考以下文章

Laravel中数据透视表的访问关系

Excle数据透视表如何禁用数据透视表的总计行/列

是否有使用Pandas限制数据透视表的行数的功能?

如何查看具有实际列值的数据透视表,例如在 excel 中的访问

如何刷新数据透视图

Excel数据透视表、切片器如何做?