天天看點

laravel中角色與權限的管理

1、頁面

laravel中角色與權限的管理

代碼:

<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、權限頁面

laravel中角色與權限的管理

代碼:

<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);
    }