Skip to content

Commit

Permalink
Integrate laravel-permission package
Browse files Browse the repository at this point in the history
  • Loading branch information
summerblue committed Nov 1, 2017
1 parent 097a8fe commit 35952d9
Show file tree
Hide file tree
Showing 7 changed files with 303 additions and 2 deletions.
2 changes: 2 additions & 0 deletions app/Models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Auth;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
use HasRoles;
use Notifiable {
notify as protected laravelNotify;
}
Expand Down
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
"mews/purifier": "~2.0",
"overtrue/laravel-lang": "~3.0",
"overtrue/pinyin": "~3.0",
"predis/predis": "~1.0"
"predis/predis": "~1.0",
"spatie/laravel-permission": "~2.7"
},
"require-dev": {
"barryvdh/laravel-debugbar": "~3.1",
Expand Down
73 changes: 72 additions & 1 deletion composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

80 changes: 80 additions & 0 deletions config/permission.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
<?php

return [

'models' => [

/*
* When using the "HasRoles" trait from this package, we need to know which
* Eloquent model should be used to retrieve your permissions. Of course, it
* is often just the "Permission" model but you may use whatever you like.
*
* The model you want to use as a Permission model needs to implement the
* `Spatie\Permission\Contracts\Permission` contract.
*/

'permission' => Spatie\Permission\Models\Permission::class,

/*
* When using the "HasRoles" trait from this package, we need to know which
* Eloquent model should be used to retrieve your roles. Of course, it
* is often just the "Role" model but you may use whatever you like.
*
* The model you want to use as a Role model needs to implement the
* `Spatie\Permission\Contracts\Role` contract.
*/

'role' => Spatie\Permission\Models\Role::class,

],

'table_names' => [

/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your roles. We have chosen a basic
* default value but you may easily change it to any table you like.
*/

'roles' => 'roles',

/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your permissions. We have chosen a basic
* default value but you may easily change it to any table you like.
*/

'permissions' => 'permissions',

/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your models permissions. We have chosen a
* basic default value but you may easily change it to any table you like.
*/

'model_has_permissions' => 'model_has_permissions',

/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your models roles. We have chosen a
* basic default value but you may easily change it to any table you like.
*/

'model_has_roles' => 'model_has_roles',

/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your roles permissions. We have chosen a
* basic default value but you may easily change it to any table you like.
*/

'role_has_permissions' => 'role_has_permissions',
],

/*
* By default all permissions will be cached for 24 hours unless a permission or
* role is updated. Then the cache will be flushed immediately.
*/

'cache_expiration_time' => 60 * 24,
];
90 changes: 90 additions & 0 deletions database/migrations/2017_11_01_154439_create_permission_tables.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;

class CreatePermissionTables extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$tableNames = config('permission.table_names');

Schema::create($tableNames['permissions'], function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('guard_name');
$table->timestamps();
});

Schema::create($tableNames['roles'], function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('guard_name');
$table->timestamps();
});

Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames) {
$table->integer('permission_id')->unsigned();
$table->morphs('model');

$table->foreign('permission_id')
->references('id')
->on($tableNames['permissions'])
->onDelete('cascade');

$table->primary(['permission_id', 'model_id', 'model_type']);
});

Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames) {
$table->integer('role_id')->unsigned();
$table->morphs('model');

$table->foreign('role_id')
->references('id')
->on($tableNames['roles'])
->onDelete('cascade');

$table->primary(['role_id', 'model_id', 'model_type']);
});

Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames) {
$table->integer('permission_id')->unsigned();
$table->integer('role_id')->unsigned();

$table->foreign('permission_id')
->references('id')
->on($tableNames['permissions'])
->onDelete('cascade');

$table->foreign('role_id')
->references('id')
->on($tableNames['roles'])
->onDelete('cascade');

$table->primary(['permission_id', 'role_id']);

Artisan::call('cache:forget', ['key' => 'spatie.permission.cache']);
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
$tableNames = config('permission.table_names');

Schema::drop($tableNames['role_has_permissions']);
Schema::drop($tableNames['model_has_roles']);
Schema::drop($tableNames['model_has_permissions']);
Schema::drop($tableNames['roles']);
Schema::drop($tableNames['permissions']);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

use Illuminate\Database\Eloquent\Model;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

class SeedRolesAndPermissionsData extends Migration
{
public function up()
{
// 清除缓存
app()['cache']->forget('spatie.permission.cache');

// 先创建权限
Permission::create(['name' => 'manage_contents']);
Permission::create(['name' => 'manage_users']);
Permission::create(['name' => 'edit_settings']);

// 创建站长角色,并赋与权限
$founder = Role::create(['name' => 'Founder']);
$founder->givePermissionTo('manage_contents');
$founder->givePermissionTo('manage_users');
$founder->givePermissionTo('edit_settings');

// 创建管理员角色,并赋与权限
$maintainer = Role::create(['name' => 'Maintainer']);
$maintainer->givePermissionTo('manage_contents');
}

public function down()
{
// 清除缓存
app()['cache']->forget('spatie.permission.cache');

// 清空所有数据表数据
$tableNames = config('permission.table_names');

Model::unguard();
DB::table($tableNames['role_has_permissions'])->delete();
DB::table($tableNames['model_has_roles'])->delete();
DB::table($tableNames['model_has_permissions'])->delete();
DB::table($tableNames['roles'])->delete();
DB::table($tableNames['permissions'])->delete();
Model::reguard();
}
}
7 changes: 7 additions & 0 deletions database/seeds/UsersTableSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,5 +44,12 @@ public function run()
$user->avatar = 'https://fsdhubcdn.phphub.org/uploads/images/201710/14/1/ZqM7iaP4CR.png?imageView2/1/w/200/h/200';
$user->save();

// 初始化用户角色,将 1 号用户指派为『站长』
$user->assignRole('Founder');

// 将 2 号用户指派为『管理员』
$user = User::find(2);
$user->assignRole('Maintainer');

}
}

0 comments on commit 35952d9

Please sign in to comment.