基于laravel的RBAC权限管理系统

本文介绍了基于laravel实现RBAC权限管理的流程,包括理解RBAC的基本步骤、设计数据表、控制器、模板和中间件,以及如何进行路由设计以控制菜单显示。还涉及到了前端树状显示的代码片段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

由于laravel插件不支持laravel8.*导致出现错误就想着自己研究一下RBAC的流程,这次发布的内容理论上支持任何laravel的框架,大家可以自己试一试权限系统。

1.首先理清楚RBAC的流程

RBAC流程图
提示:
1、 创建权限
2、 将权限赋值给角色
3、 用户选择角色来控制具体的操作
4、 整理起来就是用户角色权限的关系


RBAC的功能模块:

RBAC的功能模块

RBAC的数据表的设计:

RBAC的数据表设计
1.user表

public function up()
    {
   
        Schema::create('users', function (Blueprint $table) {
   
            $table->increments('id');
            $table->string('name')->comment('用户昵称');
            $table->string('username')->unique()->comment('用户账号');
            $table->bigInteger('is_admin')->default(0)->comment('是否是管理员|1是|0否');
            $table->bigInteger('status')->default(1)->comment('用户状态|2后台|1前端|0禁止访问');
            $table->string('icon')->nullable()->comment('用户头像');
            $table->timestamp('time')->nullable();
            $table->string('password')->comment('用户密码');
            $table->rememberToken();
            $table->timestamps();
        });
    }

2.role表

public function up()
    {
   
        Schema::create('roles', function (Blueprint $table) {
   
            $table->increments('id');
            $table->string('name')->unique()->comment('角色名称');
            $table->bigInteger('status')->default(1)->comment('角色状态|1正常|0屏蔽');
            $table->timestamps();
        });
    }

3.permission表

public function up()
    {
   
        Schema::create('permissions', function (Blueprint $table) {
   
            $table->increments('id');
            $table->string('permissions_name')->comment('权限名称');
            $table->string('urls')->nullable()->comment('页面的路由');
            $table->integer('permission_id')->default(0)->comment('上级权限ID|0为顶级ID');
            $table->string('icon')->nullable()->comment('权限图标');
            $table->string('icon_1')->nullable()->comment('权限图标名称');
            $table->integer('sort')->nullable()->comment('权限列表排序');
            $table->bigInteger('status')->default(1)->comment('权限状态|1正常|0屏蔽');
            $table->timestamps();
        });
    }

4.role_permission表

public function up()
    {
   
        Schema::create('role_permissions', function (Blueprint $table) {
   
            $table->id();
            $table->unsignedInteger('role_id')->comment('角色ID');
            //$table->foreign('被约束的字段')->references('约束的字段')->on('约束的表名')->onDelete('受此约束删除');
            $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
            $table->unsignedInteger('permission_id')->comment('权限ID');
            //$table->foreign('被约束的字段')->references('约束的字段')->on('约束的表名')->onDelete('受此约束删除');
            $table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade');
            $table->timestamps();
        });
    }

5.user_roles表

public function up()
    {
   
        Schema::create('user_roles', function (Blueprint $table) {
   
            $table->id();
            $table->unsignedInteger('user_id')->comment('用户ID');
            //$table->foreign('被约束的字段')->references('约束的字段')->on('约束的表名')->onDelete('受此约束删除');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            $table->unsignedInteger('role_id')->comment('角色ID');
            //$table->foreign('被约束的字段')->references('约束的字段')->on('约束的表名')->onDelete('受此约束删除');
            $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
            $table->timestamps();
        });
    }

RBAC的控制器的设计:

1.UserController

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Requests\Admin\UserRequest;
use App\Http\Requests\Requests\Admin\UserRoleRequest;
use App\Models\Role;
use App\Models\User;
use App\Models\UserRole;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class UserController extends Controller
{
   
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
   
        $user = User::paginate(10);
        return view('admin.user.index',compact('user'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
   
        return view('admin.user.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(UserRequest $request,User $user)
    {
   
        $request['password'] = bcrypt($request['password']);
        if (auth('web')->user()->is_admin == 1){
   
            $user->fill($request->all());
            $user->save();
        }else{
   
            $user->create([
                'name' => $request['name'],
                'username' =>  $request['username'],
                'password' =>  $request['password'],
            ]);
        }
        return redirect('/admin/user')->with('success', '保存成功');
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id,User $user)
    {
   
        $user = $user->where('id',$id)->first();
        return view('admin.user.edit',compact('user'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(UserRequest $request, $id,User $user)
    {
   
        if ($request['password']){
   
            $request['password'] = bcrypt($request['password']);
            $list = [
                'name' => $request['name'],
                'username' =>  $request['username'],
                'password' =>  $request['password'],
                'is_admin' =>  $request['is_admin'],
                'status' =>  $request['status'],
            ];
            $lists = [
                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值