PHP - 后台权限

PHP 后台权限 分为
权限,角色,和用户



角色有不同的权限,用户有不同的角色,当然你也可以让用户只有一个角色。
所以我们要建四个表

 public function up()
    {
        //角色表
        Schema::create('admin_roles', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name',30)->default('');
            $table->string('description',100)->default('');
            $table->timestamps();
        });
        //权限表
        Schema::create('admin_permissions', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name',30)->default('');
            $table->string('description',100)->default('');
            $table->timestamps();
        });
        //角色权限表
        Schema::create('admin_permission_roles', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('role_id');
            $table->integer('permission_id');
            $table->timestamps();
        });
        //用户角色表
        Schema::create('admin_role_user', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('role_id');
            $table->integer('user_id');
        });
    }

然后进行模型关联
1.权限与角色 之间的多对多关联

    //权限属于那个角色
    public function roles()
    {
        return $this->belongsToMany(\App\AdminRole::class,'admin_permission_roles','permission_id','role_id')->withPivot(['permission_id','role_id']);
    }
     /*
     * 当前角色的所有权限
     */
    public function permissions()
    {
        return $this->belongsToMany(\App\AdminPermission::class, 'admin_permission_role', 'permission_id', 'role_id')->withPivot(['permission_id', 'role_id']);
    }

2.角色与用户 之间的关联

    /*
     * 一个用户有哪些角色
     */
    public function roles()
    {
        return $this->belongsToMany(\App\AdminRole::class, 'admin_role_user', 'user_id', 'role_id')->withPivot(['user_id', 'role_id']);
    }

3 使用Gate来进行权限控制,在路由 和 前台 一起进行权限控制。

 $permissions = \App\AdminPermission::with('roles')->get();
        foreach ($permissions as $permission) {
            Gate::define($permission->name, function($user) use($permission) {
                return $user->hasPermission($permission);
            });
        }

//路由
  Route::group(['middleware'=>'can:system'], function (){

        });
 //前台
    @can('post')

     @endcan

猜你喜欢

转载自blog.csdn.net/qq_38365479/article/details/80861164