php - Laravel contains() 用于多个值

我想知道是否可以对多个值使用 contains()

例如,假设我有以下 perms 表:

  TABLE `perms` (
  `id` int(11) NOT NULL,
  `subject` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `action` varchar(255) COLLATE utf8_unicode_ci NOT NULL
  )

示例行:

  INSERT INTO `perms` (`id`, `subject`, `action`) VALUES
  (1, 'Product', 'Create'),
  (2, 'Product', 'Read'),
  (3, 'Product', 'Update'),
  (4, 'Product', 'Delete');

我的用户与 users_perms 表有一个 belongsToMany 关系,其中一个用户可以拥有任意数量的 perms

我想检查用户是否拥有包含subjectaction 的权限。因此,我想检查用户是否具有 Create Product 的权限。

现在,当仅检查 action 时,以下代码可以工作:

  $action = 'Create';
  $user->perms->contains('action', $action); // true if they have ANY Create action perm

但我也需要它来检查 subject,因为仅仅检查 action 是不够的。所以我需要这样的东西:

  $subject = 'Product';
  $action = 'Create';
  $user->perms->contains([
    ['subject', $subject],
    ['action', $action],
  ]);

我该怎么做?

最佳答案

这应该有效:

$user->perms->contains(function ($val, $key) use ($subject, $action) {
    return $val->subject == $subject && $val->action == $action;
});

https://stackoverflow.com/questions/43957370/

相关文章:

ruby-on-rails - 使用 Chartkick 和 Rails 的多系列折线图

reactjs - React router v4 历史记录,有没有办法获取您导航的网址?

php - WooCommerce 以编程方式获取购物车 ID

angular - 如何正确检查用户是否在 Angular4 中经过身份验证?

html - 如何在 Rails 中为 datetime_field_tag 设置默认值

reactjs - 改变列标题高度

amazon-ec2 - 由于超时,无法从 EC2 实例连接到 SQS

node.js - config.js 文件的 Typescript 版本

c# - 在 SortedSet 上调用 ToArray()/ToList() 是否保证返回排

wpf - 在 WPF 中串联静态资源