关于PHP的RBAC设计

1.前提

四张表 role,node,role_node,user
user里有role_id
role里有id,role_name
node里有id,name,route,pid

首先角色列表页面,直接查角色表展示出来,此时表里应有一个分配/查看权限按钮
  角色表大概样式关于PHP的RBAC设计
当点击这个按钮时,参数为当前角色的ID,跳转到角色表的查看权限页面,跳转之前要携带的参数:
此时需要对数据进行处理,role模型:

 public function nodes()
    {
    							//node表        role_node表
        return $this->belongsToMany(Node::class,'role_node','role_id','node_id');
    }

role控制器的node方法使用node模型获取当前角色id权限数据及所有权限

public function node(Role $role)
    {
        $nodeAll = (new Node())->getAllList();
        $nodes = $role->nodes()->get()->pluck('id')->toArray();
        return view('admin.role.node',compact('role','nodeAll','nodes'));
    }

查看权限页面展示:

<div class="page-container">
    <form action="{{route('admin.role.node',$role)}}" method="post" class="form form-horizontal">
        @csrf
        @foreach($nodeAll as $v)
            <div>
                <input type="checkbox" name="node[]" value="{{$v['id']}}" @if(in_array($v['id'],$nodes)) checked @endif>
                {{$v['html']}}{{$v['name']}}
            </div>
            @endforeach

        <div class="row cl">
            <div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3">
                <input type="submit" class="btn btn-primary radius" value="分配权限">
            </div>

        </div>
    </form>
</div>

简单的sync更新数据库

public function nodeSave(Role $role,Request $request)
    {
        $params = $request->get('node');
        $role->nodes()->sync($params);
        return redirect(route('admin.role.index'))->with('success','添加成功');
    }

这只是简单的通过一个给角色添加权限来理清思路,如果有其他PHP RBAC方面疑问可以私信或者发送邮件到我的邮箱zhmoon1203@163.com免费资讯其他问题!

上一篇:随机数是骗人的,.Net、Java、C为我作证


下一篇:D2. Seating Arrangements (hard version)