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>