基于laravel的RBAC权限管理系统

前言

由于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']
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RBAC(Role-Based Access Control)是一种权限管理模型,它是建立在角色的基础上,将用户分配给角色,再根据角色的权限授予对应的资源访问权限。这种模型可以有效地管理大规模应用系统中的权限问题。下面是基于RBAC权限管理系统的设计分析: 1.确定系统需求:首先要确定系统的具体需求和功能,包括用户界面、权限设置和管理、角色管理、资源管理等方面。同时需要明确系统的主要目标是什么,以便在设计时保持一致性。 2.确定角色:根据系统需求,确定所需要的角色类型和数量,包括系统管理员、普通用户等。在设计时应该合理分配权限,避免角色间权限重叠或漏洞。 3.确定资源:确定系统中的资源,包括数据、程序、文档等,依据资源的重要性和保密性进行分类,在角色分配时考虑资源所属角色的权限。 4.权限授予:根据角色的不同,授予对应的资源访问权限,包括读取、修改、删除等。在授予权限时要严格按照角色的权限定义进行操作,避免数据泄漏和滥用。 5.权限审核:对所有权限的修改和删除操作进行记录和审查,定期对权限进行审核,保证系统的安全性和稳定性。 6.权限维护:系统上线后,需要对权限进行维护和更新,包括新增角色、修改权限、删除角色等操作,同时定期对系统进行安全检查和修复漏洞。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值