Laravel 5.5 - 如果角色有权限,请选中复选框

时间:2017-08-31 11:07:36

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

我有以下代码与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

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

2 个答案:

答案 0 :(得分:6)

只需将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->permissions中,您可以

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

通过这种方式,您可以检查您的角色是否具有身份$permission->id的权限。

答案 1 :(得分: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