laravel框架权限管理

laravel RBAC权限管理

一.角色表

1.创建角色表

生成迁移文件

php artisan make:model Models/Role -m

添加字段

 public function up()
    {
        Schema::create('roles', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name')->default('')->comment('角色名称');
            $table->enum('is_static',[0,1])->default(0)->comment('是否启用');
            $table->timestamps();
            $table->softDeletes();
        });
    }

执行迁移

php artisan migrate

生成控制器

php artisan make:controller Admin/RoleController -r -m Models/Role
2.路由
		//角色组
        //展示
        Route::get('role/index','RoleController@index')->name('admin.role.index');
        //添加页面
        Route::get('role/create','RoleController@create')->name('admin.role.create');
        //添加
        Route::post('role/store','RoleController@store')->name('admin.role.store');
        //删除
        Route::delete('role/del/{id}','RoleController@destroy')->name('admin.role.del');
        //软删除还原
        Route::get('role/restore/{id}','RoleController@restore')->name('admin.role.restore');
        //批量删除
        Route::delete('role/delall','RoleController@delall')->name('admin.role.delall');
        //修改页面
        Route::get('role/edit/{id}','RoleController@edit')->name('admin.role.edit');
        //修改
        Route::put('role/edit/{id}','RoleController@update')->name('admin.role.edit');
3.增删改查

展示页面

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="/admin/static/h-ui/css/H-ui.min.css" />
    <link rel="stylesheet" type="text/css" href="/admin/static/h-ui.admin/css/H-ui.admin.css" />
    <link rel="stylesheet" type="text/css" href="/admin/lib/Hui-iconfont/1.0.8/iconfont.css" />
    <link rel="stylesheet" type="text/css" href="/admin/static/h-ui.admin/skin/default/skin.css" id="skin" />
    <link rel="stylesheet" type="text/css" href="/admin/static/h-ui.admin/css/style.css" />
    <link rel="stylesheet" type="text/css" href="/css/pagination.css" />
    <title>管理员列表</title>
</head>
<body>
<nav class="breadcrumb">
    <i class="Hui-iconfont">&#xe67f;</i> 首页 <span class="c-gray en">&gt;</span> 用户中心 <span class="c-gray en">&gt;</span> 用户管理 <a class="btn btn-success radius r" style="line-height:1.6em;margin-top:3px" href="javascript:location.replace(location.href);" title="刷新" ><i class="Hui-iconfont">&#xe68f;</i></a>
</nav>
<div class="page-container">
    <form class="text-c">输入想要搜索的角色:
        <input type="text" name="name" value="{
  {$kw}}" class="input-text" style="width: 100px">
        <button type="submit" class="btn btn-success radius">
            <i class="Hui-iconfont">&#xe665;</i>搜角色
        </button>
    </form>
    <div class="cl pd-5 bg-1 bk-gray mt-20">
        <span class="l">
            <a href="javascript:;" onclick="delall(this)" data-url="{
  {route('admin.role.delall')}}" class="btn btn-danger radius"><i class="Hui-iconfont">&#xe6e2;</i> 批量删除</a>
            <a href="{
  {route('admin.role.create')}}"  class="btn btn-primary radius"><i class="Hui-iconfont">&#xe600;</i> 添加角色</a>
        </span>
        <span class="r">共有数据:<strong>88</strong> 条</span>
    </div>

    @include('admin.common.validate')
    @include('admin.common.msg')
    <div class="mt-20">
        <table class="table table-border table-bordered table-hover table-bg table-sort">
            <thead>
            <tr class="text-c">
                <th width="25"><input type="checkbox" name="" value=""></th>
                <th width="80">ID</th>
                <th width="100">角色名称</th>
                <th width="50">查看权限</th>
                <th width="130">加入时间</th>
                <th width="50">状态</th>
                <th width="150">操作</th>
            </tr>
            </thead>
            <tbody>
            @foreach($data as $item)
                <tr class="text-c">
                    <td>
                        @if(auth()->id() != $item->id)
                            <input type="checkbox" name="ids[]" value="{
  {$item->id}}" class="inputChoose"></td>
                    @endif
                    <td>{
  {$item->id}}</td>
                    <td>{
  {$item->name}}</td>
                    <td><a href="{
  {route('admin.role.node',$item)}}" class="label label-warning radius">权限</a></td>
                    <td>{
  {$item->created_at}}</td>
                    <td class="td-status">
                        {!! $item->static !!}
                    </td>
                    <td class="td-manage">
                        <a href="#" class="label label-primary radius">停用</a>
                        @if($item->deleted_at)
                            <a></a>
                        @else
                            <a href="{
  {route('admin.role.edit',['id'=>$item->id])}}" class="label label-primary radius">修改</a>
                        @endif
                        @if(auth()->id() != $item->id)
                            @if($item->deleted_at)
                                <a href="{
  {route('admin.role.restore',['id'=>$item->id])}}" class="label label-warning radius">还原</a>
                            @else
                                <a href="{
  {route('admin.role.del',['id'=>$item->id])}}" class="label label-danger radius delbtn">删除</a>
                            @endif
                        @endif
                    </td>
                </tr>
            @endforeach
            </tbody>
        </table>
        {
  { $data->links() }}
    </div>
</div>
<!--_footer 作为公共模版分离出去-->
<script type="text/javascript" src="/admin/lib/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="/admin/lib/layer/2.4/layer.js"></script>
<script type="text/javascript" src="/admin/static/h-ui/js/H-ui.min.js"></script>
<script type="text/javascript" src="/admin/static/h-ui.admin/js/H-ui.admin.js"></script> <!--/_footer 作为公共模版分离出去-->

<!--请在下方写此页面业务相关的脚本-->
<script type="text/javascript" src="/admin/lib/My97DatePicker/4.8/WdatePicker.js"></script>
<script type="text/javascript" src="/admin/lib/datatables/1.10.0/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="/admin/lib/laypage/1.2/laypage.js"></script>
<script type="text/javascript">
    let _token = '{
  {csrf_token()}}';
    $('.delbtn').click(function () {
        let url = $(this).attr('href');
        $.ajax({
            url,
            type:'DELETE',
            data:{_token}
        }).then(ret=>{
            if(ret.status == 100){
                layer.msg('删除成功',{
                    time:3000,
                    icon:1
                },()=>{
                    $(this).parents('tr').remove();
                    location.reload();
                });
            }
        });
        return false;
    });
    function delall(obj) {
        let url = $(obj).attr('data-url');
        let ids = $('input[name="ids[]"]:checked');
        let id = [];
        $.each(ids,(key,item)=>{
            id.push(item.value)
            //jQuery对象获取input标签的value值,item.val()
            //dom对象获取input标签的value值 item.value
        });
        $.ajax({
            url,
            type:'DELETE',
            data:{_token,id}
        }).then(ret=>{
            if(ret.status == 100){
                layer.msg(ret.msg,{
                    time:1000,//2秒自动关闭
                    icon:1
                },()=>{
                    location.reload();//刷新
                });
            }
        });
    }
</script>
</body>
</html>

添加页面

@extends('admin.common.main_app')

@section('cnt')
    {
  {--显示报错--}}
    @include('admin.common.validate')
    <article class="page-container">
        <form action="{
  {route('admin.role.store')}}" method="post" class="form form-horizontal" id="form-member-add">
            @csrf
            <div class="row cl">
                <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>角色名称:</label>
                <div class="formControls col-xs-8 col-sm-9">
                    <input type="text" class="input-text" name="name">
                </div>
            </div>
            <div class="row cl">
                <div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3">
                    <input class="btn btn-primary radius" type="submit" value="&nbsp;&nbsp;提交&nbsp;&nbsp;">
                </div>
            </div>
        </form>
    </article>

@endsection

@section('js')
    <script>
        $('.skin-minimal input').iCheck({
            checkboxClass: 'icheckbox-blue',
            radioClass: 'iradio-blue',
            increaseArea: '20%'
        });
        $("#form-member-add").validate({
            rules:{
                name:{
                    required:true,
                    minlength:2,
                    maxlength:16
                },
            },
            messages:{
                name:{
                    required:"请输角色名称"
                }
            },
            onkeyup:false,
            focusCleanup:true,
            success:"valid",
            submitHandler:function(form){
                form.submit();
            }
        });
    </script>
@endsection

修改页面

@extends('admin.common.main_app')

@section('cnt')
    {
  {--显示报错--}}
    @include('admin.common.validate')
    <article class="page-container">
        <form action="{
  {route('admin.role.edit',$data)}}" method="post" class="form form-horizontal" id="form-member-add">
            @method('PUT')
            @csrf
            <div class="row cl">
                <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>用户名:</label>
                <div class="formControls col-xs-8 col-sm-9">
                    <input type="text" class="input-text" name="name" value="{
  {$data['name']}}">
                </div>
            </div>
            <div class="row cl">
                <div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3">
                    <input class="btn btn-primary radius" type="submit" value="&nbsp;&nbsp;修改&nbsp;&nbsp;">
                </div>
            </div>
        </form>
    </article>

@endsection

@section('js')
    <script>
        $('.skin-minimal input').iCheck({
            checkboxClass: 'icheckbox-blue',
            radioClass: 'iradio-blue',
            increaseArea: '20%'
        });
        $("#form-member-add").validate({
            rules:{
                name:{
                    required:true,
                    minlength:2,
                    maxlength:16
                }
            },
            messages:{
                truename:{
                    required:"请输入角色名称"
                }
            },
            onkeyup:false,
            focusCleanup:true,
            success:"valid",
            submitHandler:function(form){
                form.submit();
            }
        });
    </script>
@endsection

节点页面

@extends('admin.common.main_app')

@section('cnt')
    <form action="{
  {route('admin.role.node',$role)}}" method="post">
        @csrf
        @foreach($allNodes as $node)
            <div class="card-group">
                <div class="card">
                    <div class="card-body">
                        <input type="checkbox" value="{
  {$node->id}}" name="node[]"
                               @if(in_array($node->id,$data))
                                   checked
                               @endif>{
  {$node->name}}
                    </div>
                </div>
            </div>
        @endforeach

        <button>给角色添加权限</button>
    </form>
@endsection

4.控制器
<?php

namespace A
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值