【问题标题】:Laravel 5.5 - Check checkbox if role has permissionLaravel 5.5 - 如果角色有权限,请选中复选框
【发布时间】:2018-02-09 07:47:08
【问题描述】:

我有以下代码可以与 Form Collective 包一起使用,但是由于该包尚未针对 5.5 进行更新,因此现在无法正常工作。我也在使用 Spatie 的 Laravel Permission 包

我的代码是

@foreach ($permissions as $permission)

    {{Form::checkbox('permissions[]',  $permission->id, $role->permissions ) }}
    {{Form::label($permission->name, ucfirst($permission->name)) }}<br>

@endforeach

我认为这只是循环通过 permissions 并且如果 permission 属于当前的 role,请选中该框。

如何在不使用包的情况下实现这一点?

我目前已经尝试过

@foreach ($permissions as $permission)

    <div class="checkbox">
        <label>
            {{ ucfirst($permission->name) }}
        </label>
        <input type="checkbox" name="permissions[]" value="{{ $permission->id }}">
        <br>
    </div>

@endforeach

但是我不确定如何根据角色在列表中是否有权限来附加选中的属性。

【问题讨论】:

  • 这实际上并不取决于 Laravel 本身,而是一个 HTML 问题。无论如何,我在下面发布了答案
  • 不,它依赖于 Laravel

标签: php laravel laravel-5 blade laravel-5.5


【解决方案1】:

只需将checked 属性添加到复选框 HTML:

<input type="checkbox" name="permissions[]" value="{{ $permission->id }}" checked>

如果您需要根据条件设置它,请使用以下代码:

<input type="checkbox" name="permissions[]" value="{{ $permission->id }}" @if(/* some condition */) checked @endif>

编辑

由于我没有理解问题,所以我将添加一些细节。

假设您的 Role 模型具有附加权限的集合,并且存储在属性 $role-&gt;permissions 中,您可以这样做

<input type="checkbox" name="permissions[]" value="{{ $permission->id }}" @if($role->permissions->contains($permission)) checked @endif>

这样你就可以检查你的角色是否拥有ID为$permission-&gt;id的权限。

【讨论】:

  • 这个没用,我知道可以加个check属性,但是我需要了解如何查询角色看是否有权限勾选框
  • 哦,我明白了,从问题本身来看并不是很清楚,我将编辑我的答案
  • 现在应该可以解决你的问题了
  • 嗯,可以,谢谢!只是想看看我错过了什么
  • 乐于助人。我刚刚查看了 Spatie Laravel 权限,这种语法应该可以开箱即用
【解决方案2】:

试试这个:

@foreach ($permissions as $permission)

    <div class="checkbox">
        <label>
            {{ ucfirst($permission->name) }}
        </label>
        <input type="checkbox" name="permissions[]" value="{{ $permission->id }} {{($role->permissions == $permission->id) ? 'checked' : ''}}">
        <br>
    </div>

@endforeach

【讨论】:

  • 我所有的复选框都是空的,但我有 3 个角色,他们之间的权限不同,所以应该期望至少有几个被选中
  • 你是如何在你的数据库中保存权限的?
  • 是的,那是因为$role-&gt;permissions 是一个集合,$permission-&gt;id 是一个整数。所以基本上你将整个集合与一个 id 进行比较,这将始终返回 false
  • $role-&gt;permissions == $permission-&gt;id更改为$role-&gt;permissions-&gt;contains('id', $permission-&gt;id)
  • @Wreigh 只要集合是 Eloquent 集合,就不需要在 contains 中指定参数,contains 将检查集合中的每个模型,如果 $model-&gt;is($other) 其中@987654330 @ 相当于$model-&gt;getKey() === $other-&gt;getKey()
猜你喜欢
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 2014-09-15
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
相关资源
最近更新 更多