gpt4 book ai didi

laravel - 在 Vue JS 和 Laravel 5.1 + Entrust 中检查特定角色的权限

转载 作者:搜寻专家 更新时间:2023-10-30 22:13:37 24 4
gpt4 key购买 nike

我正在使用 Zizaco/entrust在 Laravel 5.1 中。我想通过使用复选框明确授予特定角色的权限。这是我的代码:

获取角色:

fetchRoles: function(){
this.$http.get('api/role',function(data){
this.$set('roles',data);
});
}

获取权限:

fetchPermissions: function(){
this.$http.get('api/permission',function(data){
this.$set('permissions',data);
});
}

这是分配角色和权限的表格:

<table class="table table-bordered table-responsive">
<thead>
<th>Permissions/Roles</th>
<th v-for="role in roles">
@{{ role.display_name }}
</th>
</thead>
<tbody>
<tr v-for="permission in permissions">
<td>@{{ permission.display_name }}</td>
<td v-for="role in roles">
<input type="checkbox" value="@{{ permission.id }}" name="roles[@{{ role.id }}][permissions][]">
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>
<button type="submit" class="btn btn-primary">Alter Permission</button>
</td>
</tr>
</tfoot>
</table>

输出如下: Screenshot of Output

权限也通过以下方法成功分配:

public function changePermission(Request $request){
$input = $request->all();
$roles = Role::all();

foreach($roles as $role)
{
$permissions_sync = isset($input['roles'][$role->id])? $input['roles'][$role->id]['permissions'] : [];
$role->perms()->sync($permissions_sync);
}
Flash::success('Successfully modified permissions!');
return redirect()->back();
}

如果角色具有特定权限,我唯一需要做的就是选中复选框。

如果它在 php 对象中,我可以执行以下操作:

   @if(count($permissions)>0)
@foreach($permissions as $permission)
<tr>
<td>{{$permission->display_name}}</td>
@if(count($roles)>0)
@foreach($roles as $role)
<td><input type="checkbox" value="{{$permission->id}}" name="roles[{{$role->id}}][permissions][]" @if($role->hasPermission($permission->name)) checked="checked" @endif></td>@endforeach @endif </tr> @endforeach @endif

如何在 Vue JS 中使用 hasPermission() 方法?

最佳答案

我遇到了同样的问题,经过一段时间的真正寻找答案后,我决定只看 VueJS 文档。具体this part about checkboxes .

所以看起来 vue 将每个复选框的值存储在 'checkedNames' 数组中,该数组绑定(bind)到所有复选框。由于我们有多个权限和分配了这些权限的角色,我们基本上可以创建相同的效果。

这是我用自己的方法所做的一个非常基本的例子。

在我的模板中,我有角色和权限的 Split View:

<div class="roles">
<div v-for="role in roles">
<a v-on:click="update(role)">{{ role.name }}</a>
</div>
</div>

<div class="perms">
<div v-for="perm in permissions">
<input type="checkbox"
v-model="currentPerms"
v-bind:id="perm.id"
v-bind:value="perm.name"> {{perm.display_name}} {{perm.name}}
</div>
</div>

由于复选框绑定(bind)到“currentPerms”数组,我们可以通过选中复选框或设置值来更新该数组,因为它是响应式(Reactive)的。

在这种情况下,我使用 lodash通过单击的角色的值进行映射。

<script>
...

update: function(role) {
this.currentPerms = _.map(role.perms, permission => {
return permission.name;
});
}

...
</script>

我已经做了一个 example on JSFiddle .希望这可以帮助!

关于laravel - 在 Vue JS 和 Laravel 5.1 + Entrust 中检查特定角色的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37936725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com