1、頁面

代碼:
<div class="contain" style="width: 84%;" id="contain">
<h2 style="padding:0;margin:0;font-size:28px;letter-spacing:4px;">角色清單</h2>
<table class="table table-hover table-condensed table-responsive" id="table">
<thead>
<tr>
<th>id</th>
<th>角色名</th>
<th style="padding-left: 30px;">操作</th>
</tr>
</thead>
<tbody>
@foreach ($roles as $role)
<tr>
<td>{{ $role->id }}</td>
<td>{{ $role->name }}</td>
<td>
<a style="font-size: 15px;" type="submit" href="{{ url('role/'.$role->id.'/edit') }}" target="_blank" rel="external nofollow" class="btn">權限</a>
<a style="font-size: 15px;" type="submit" class="btn" οnclick="delPri({{ $role->id }})">删除</a>
</td>
</tr>
@endforeach
</tbody>
<div style="float:right;margin-top:-30px;margin-right:100px;height:70px;" id="pagination">
{{ $roles->render() }}
<div style="float:right;letter-spacing: 2px;margin-left:20px;" class="pagi__count"> 共<b>{{ $count }}</b>條資料</div>
</div>
</table>
</div>
2、權限按鈕的控制器
public function edit($role_id)
{
$role = Role::find($role_id);
$my_privileges = Role::find($role_id)->privileges;
$privileges = Privilege::all();
return view('role.edit', compact('role', 'my_privileges', 'privileges'));
}
3、權限頁面
代碼:
<form action="{{ url('role/'.$role->id) }}" method="post">
{{ csrf_field() }}
{{ method_field('put') }}
@foreach ($privileges as $privilege)
<div class="form-group">
<label for=""><input type="checkbox" name="privileges[]" value="{{ $privilege->id }}"
@if ($my_privileges->contains($privilege)) checked @endif> {{ $privilege->name }}</label>
</div> // 判斷若有這個權限就選中
@endforeach
<button type="submit" class="btn btn-primary">送出</button>
</form>
4、送出後的修改實作
public function update(Request $request, $role_id)
{
$role = Role::find($role_id);
$request = $request->except('_token', 'put');
$my_privileges = Role::find($role_id)->privileges;
$privileges = Privilege::findMany($request['privileges']);
// 要增加的
$addPrivileges = $privileges->diff($my_privileges);
foreach ($addPrivileges as $addPrivilege) {
$role->grantPrivileges($addPrivilege); // 模型中的方法
}
// 要删除的
$delePrivileges = $my_privileges->diff($privileges);
foreach ($delePrivileges as $delePrivilege) {
$role->deletePrivileges($delePrivilege); // 模型中的方法
}
return back();
}
5、模型中的實作
// 給角色賦予權限
public function grantPrivileges($privilege)
{
return $this->privileges()->save($privilege);
}
// 取消角色賦予的權限
public function deletePrivileges($privilege)
{
return $this->privileges()->detach($privilege);
}