Laravel 更改角色权限
我试图让它成为一些管理员可以决定哪个角色可以做什么,从前端很容易,但我有点卡住了。我试过几种不同的方法,但到目前为止没有一种有效 到目前为止,我已经试过了:Laravel 更改角色权限,laravel,authentication,user-controls,laravel-5.2,user-roles,Laravel,Authentication,User Controls,Laravel 5.2,User Roles,我试图让它成为一些管理员可以决定哪个角色可以做什么,从前端很容易,但我有点卡住了。我试过几种不同的方法,但到目前为止没有一种有效 到目前为止,我已经试过了: @foreach($role as $role) {!! Form::model($permission, [ 'method' => 'PATCH', 'url' => 'settings/permissionsUpdate', ]) !!} <br /&
@foreach($role as $role)
{!! Form::model($permission, [
'method' => 'PATCH',
'url' => 'settings/permissionsUpdate',
]) !!}
<br />
{{$role->name}}
<br />
<input type="hidden" name="role_id" value="{{ $role->id }}" />
@foreach($permission as $perm)
<select name="permissions[ {{ $perm->id }} ]">
<option value="1">Allowed</option>
<option value="0">Not Allowed</option>
</select>
<br />
{{$perm->name}}
<br />
@endforeach
{!! Form::submit('Save Settings', ['class' => 'btn btn-primary']) !!}
{!! Form::close() !!}
@endforeach
和控制器
public function permissionsUpdate(Request $request)
{
$allowed_permissions = [];
foreach($request->input('permissions') as $permission) {
if ($permission == 1) {
$allowed_permissions[] = $permission;
}
$role = Role::find($request->input('role_id'));
$role->permissions()->sync($allowed_permissions); //Currently gives error
$role->save();
}
}
我得到了错误
调用未定义的方法Illumb\Database\Query\Builder::syncPermission()
模型
角色:
许可
public function PermissionsRole()
{
return $this->hasMany('App\PermissionRole', 'role_id', 'id');
}
但我得承认我有点迷失了方向。我需要附加和取消附加角色的权限,但我不知道如何执行此操作
我似乎仍然无法理解这一点,我试图不确定如何将许可证附加或解除附加到用户
更新:
到目前为止,我已经试过了,我已经接近了,但是仍然有一些问题
我的模型有问题,它试图找到表角色,所以我把它改为
public function permissions()
{
return $this->belongsToMany('App\permission'); (Had to make a new model called permisson, because when i used permissions it looked for role_permissions and it is called role_permission, but the table alone is called permissions, bit confsuing there)
}
这几乎使它工作了,但它只改变了第一个值(1),即使所有都是允许的,它只附加permissons_id等于1,然后role id等于正确的role_id,如果我添加请求,它似乎获得了权限为1、2、3、4等的所有正确数据,但在之后的某个地方出错了。此外,视图仍然无法显示从一开始允许或不允许的内容。如果能成功,我试过这样的方法:
<option value="1" {{ @ifUserCan($perm->slug) ? 'selected="selected"' : null }} >Allowed</option>
<option value="0" {{ @ifUserCan($perm->slug) ? null : 'selected="selected"' @endif }}>Not Allowed</option>
slug)?'selected=“selected”:null}>允许
鼻涕虫?null:'selected=“selected”'@endif}}>不允许
但是你不能那样做。请发布你的模型。当然我的不好,只是添加了它们。你的关系是错误的。它应该是
的多个
,而不是的多个
。换一下,让我知道。有关详细信息,您的权限\u角色
表是一个轴心,不需要单独的模型来处理它。请参阅,我收到一个错误,说找不到权限,但我认为这是因为$role->permissions()->sync($allowed\u permissions);实际上必须是$role->permissionsRole->sync($allowed\u permissions);还是我错了?但是我改变了它,我在SettingsController.php第81行得到了错误FatalErrorException:调用null上的成员函数sync()permissions
和roles
表是否有id
属性?如果是,请编辑您的帖子。如果没有,请将它们添加到表中。删除PermissionRole
模型,因为它是不必要的。更新您的权限
和角色
模型,并添加以下内容:在权限
模型中添加:公共功能角色(){return$this->belongstomy('Permission');}
在角色
模型中添加:公共功能任务(){return return$this->belongsToMany Role('Role');}
那么你对$role->permissions()->synch($array\u of\u id)
很在行。
public function permissions()
{
return $this->belongsToMany('App\permission'); (Had to make a new model called permisson, because when i used permissions it looked for role_permissions and it is called role_permission, but the table alone is called permissions, bit confsuing there)
}
<option value="1" {{ @ifUserCan($perm->slug) ? 'selected="selected"' : null }} >Allowed</option>
<option value="0" {{ @ifUserCan($perm->slug) ? null : 'selected="selected"' @endif }}>Not Allowed</option>