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"></i> 首页 <span class="c-gray en">></span> 用户中心 <span class="c-gray en">></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"></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"></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"></i> 批量删除</a>
<a href="{
{route('admin.role.create')}}" class="btn btn-primary radius"><i class="Hui-iconfont"></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=" 提交 ">
</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=" 修改 ">
</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