关于PHP的RBAC设计

1.前提

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

首先角色列表页面,直接查角色表展示出来,此时表里应有一个分配/查看权限按钮
  角色表大概样式角色表基本样式
当点击这个按钮时,参数为当前角色的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免费资讯其他问题!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值