我想知道是否可以对多个值使用 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
。
我想检查用户是否拥有包含subject
和action
的权限。因此,我想检查用户是否具有 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 设置默认值
amazon-ec2 - 由于超时,无法从 EC2 实例连接到 SQS
node.js - config.js 文件的 Typescript 版本