[英]Laravel 5.1 acl roles and permission in frontend
這是我的權限,角色和Permission_role的表結構
允許:
身份證名
角色:
身份證名
Permission_role:
角色編號,權限編號
這是我的數據透視表。
在我設置的前端中,
welcome.blade.php
<form method="POST" action="/give/permission">
{!! csrf_field() !!}
<select name="role" class="selectpicker" multiple data-max-options="2">
@foreach($roles as $r)
<option value="{{$r->id}}">{{$r->name}}</option>
@endforeach
</select>
<div class="checkbox">
@foreach ($perm as $p)
{!! Form::checkbox('p[]', $p->id, in_array($p->id, $all_data)) !!}
{!! Form::label('permisssion', $p->name) !!}<br>
@endforeach
</div>
<button type="submit" class="default">Submit</button>
</form>
在我的controller.php中
public function postrolperm(Request $request,$id){
$p = Role::find($id);
$role = $request->role;
//dd($input1);
$permission = $request->p;
//dd($input2);
//
//$role = Role::where("name", "admin")->get();
if(isset($permission) && isset($role)){
$role->givePermissionTo($permission);
$role->save();
}
return redirect::back();
}
role.php
public function givePermissionTo(Permission $permission)
{
return $this->permissions()->save($permission);
}
我無法將數據保存到數據透視表中。
我在php artisan tinker
嘗試了以下命令:
$role = Role::first(); //which gives me the first role with id of 1
$role->givePermissionTo(Permission::first()); // it will save the first permission to the role.
我在控制器中做錯了什么?
還需要注意的是,這條路線運作良好。
Route::get("/pivot", function(){
$permission = new Permission;
$permission->name = "can to";
$permission->save();
$role = new Role;
$role->name = "admin2";
$role->save();
$role->givePermissionTo($permission);
return "true";
});
您是否添加了
use App\Role;
在controller.php文件中?
它不起作用的原因是因為您尚未基於從視圖傳遞回的id
創建Role
和Permission
對象。 下面是一個工作示例:
$role_id = $request->role;
$permission_ids = $request->p; // This comes back as an array.
if(isset($permission_ids) && isset($role_id)){
$role_object = Role::where('id', $role_id)->firstOrFail();
foreach ($permission_ids as $permission_id) {
// loop through each permission id
// find the corresponding permission object in the database
$permission_object = Permission::where('id', $permission_id)->firstOrFail();
// assign the object to the role
$role_object->givePermissionTo($permission_object);
}
$role_object->save();
}
return Redirect::back()
請注意,如果從視圖傳回的角色和權限與數據庫中的有效ID不對應,則將引發異常。 如果要使失敗保持沉默(即不引發異常first()
,請使用first()
而不是firstOrFail()
。
確保添加use App\\Role;
並在Controller文件頂部use App\\Permission
。
由於您試圖在表示從視圖$role
傳遞的角色ID的字符串上調用givePermissionTo
函數,因此您的版本失敗。 您錯過了從數據庫獲取Role
對象之間的步驟。
奇怪的是,您的$p
變量是正確的,但是您還需要從數據庫中獲取相應的$permission
對象,如我的示例所示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.