国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - Laravel5.1框架自帶權限控制系統 ACL用法分析

Laravel5.1框架自帶權限控制系統 ACL用法分析

2021-09-22 16:47luyaran PHP教程

這篇文章主要介紹了Laravel5.1框架自帶權限控制系統 ACL用法,結合實例形式分析了laravel5.1相關的角色創建、權限分配等相關操作技巧,需要的朋友可以參考下

本文實例講述了Laravel5.1框架自帶權限控制系統 ACL用法。分享給大家供大家參考,具體如下:

Laravel在5.1.11版本中加入了Authorization,可以讓用戶自定義權限,今天分享一種定義權限系統的方法。

1. 創建角色與權限表

使用命令行創建角色與權限表:

?
1
php artisan make:migration create_permissions_and_roles --create=permissions

之后打開剛剛創建的文件,填入下面的代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public function up()
{
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('label');
$table->string('description')->nullable();
$table->timestamps();
});
Schema::create('permissions', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('label');
$table->string('description')->nullable();
$table->timestamps();
});
Schema::create('permission_role', function (Blueprint $table) {
$table->integer('permission_id')->unsigned();
$table->integer('role_id')->unsigned();
$table->foreign('permission_id')
->references('id')
->on('permissions')
->onDelete('cascade');
$table->foreign('role_id')
->references('id')
->on('roles')
->onDelete('cascade');
$table->primary(['permission_id', 'role_id']);
});
Schema::create('role_user', function (Blueprint $table) {
$table->integer('user_id')->unsigned();
$table->integer('role_id')->unsigned();
$table->foreign('role_id')
->references('id')
->on('roles')
->onDelete('cascade');
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');
$table->primary(['role_id', 'user_id']);
});
}
public function down()
{
Schema::drop('roles');
Schema::drop('permissions');
Schema::drop('permission_role');
Schema::drop('role_user');
}

上面的代碼會創建角色表、權限表、角色與權限的中間表以及角色與用戶的中間表。

2. 創建模型

接下來使用命令行分別創建角色與權限模型:

?
1
2
php artisan make:model Permission
php artisan make:model Role

然后分別打開Permission.php、Role.php 以及 User.php ,加入下面的代碼:

?
1
2
3
4
5
// Permissions.php
public function roles()
{
return $this->belongsToMany(Role::class);
}
?
1
2
3
4
5
6
7
8
9
10
// Role.php
public function permissions()
{
return $this->belongsToMany(Permission::class);
}
//給角色添加權限
public function givePermissionTo($permission)
{
return $this->permissions()->save($permission);
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// User.php
public function roles()
{
return $this->belongsToMany(Role::class);
}
// 判斷用戶是否具有某個角色
public function hasRole($role)
{
if (is_string($role)) {
return $this->roles->contains('name', $role);
}
return !! $role->intersect($this->roles)->count();
}
// 判斷用戶是否具有某權限
public function hasPermission($permission)
{
return $this->hasRole($permission->roles);
}
// 給用戶分配角色
public function assignRole($role)
{
return $this->roles()->save(
Role::whereName($role)->firstOrFail()
);
}

上面的代碼實現了給角色分配權限及給用戶分配角色,然后還提供了判斷用戶是否具有某角色及某權限的方法。

之后就給使用Laravel提供的Authorization來定義權限控制了,打開 /app/Providers/AuthServiceProvider.php 文件,在 boot() 中添加代碼:

?
1
2
3
4
5
6
7
8
9
10
public function boot(GateContract $gate)
{
parent::registerPolicies($gate);
$permissions = \App\Permission::with('roles')->get();
foreach ($permissions as $permission) {
$gate->define($permission->name, function($user) use ($permission) {
return $user->hasPermission($permission);
});
}
}

通過上面的方法就定義好了各個權限。下面就該填充數據了。

3. 填充數據

為方便起見,這里使用 tinker 命令行工具來添加幾條測試數據:

?
1
php artisan tinker

之后進入命令行,依次輸入下列命令:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 改變命名空間位置,避免下面每次都要輸入 App
namespace App
// 創建權限
$permission_edit = new Permission
$permission_edit->name = 'edit-post'
$permission_edit->label = 'Can edit post'
$permission_edit->save()
$permission_delete = new Permission
$permission_delete->name = 'delete-post'
$permission_delete->label = 'Can delete post'
$permission_delete->save()
// 創建角色
$role_editor = new Role
$role_editor->name = 'editor';
$role_editor->label = 'The editor of the site';
$role_editor->save()
$role_editor->givePermissionTo($permission_edit)
$role_admin = new Role
$role_admin->name = 'admin';
$role_admin->label = 'The admin of the site';
$role_admin->save()
// 給角色分配權限
$role_admin->givePermissionTo($permission_edit)
$role_admin->givePermissionTo($permission_delete)
// 創建用戶
$editor = factory(User::class)->create()
// 給用戶分配角色
$editor->assignRole($role_editor->name)
$admin = factory(User::class)->create()
$admin->assignRole($role_admin->name)

上面我們創建了兩個權限:edit-post 和 delete-post,然后創建了 editor 和 admin 兩個角色,editor 角色擁有 edit-post 的權限,而 admin 兩個權限都有。之后生成了兩個用戶,分別給他們分配了 editor 和 admin 的角色,即:ID 1 用戶擁有 editor 角色,因此只有 edit-post 權限,而 ID 2 用戶擁有 admin 角色,因此具有 edit-post 和 delete-post 權限。下面我們來驗證下是否正確。

打開 routes.php 文件:

?
1
2
3
4
Route::get('/', function () {
$user = Auth::loginUsingId(1);
return view('welcome');
})

上面我們先驗證 ID 1 用戶的權限,然后修改 /resources/views/welcome.blade.php 文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
<title>Laravel</title>
</head>
<body>
<h1>權限測試</h1>
<p>
@can('edit-post')
<a href="#" rel="external nofollow" rel="external nofollow" >Edit Post</a>
@endcan
</p>
<p>
@can('delete-post')
<a href="#" rel="external nofollow" rel="external nofollow" >Delete Post</a>
@endcan
</p>
</body>
</html>

在視圖中我們通過 Laravel 提供的 @can 方法來判斷用戶是否具有某權限。

打開瀏覽器,訪問上面定義的路由,可以看到視圖中只出現了 Edit Post 鏈接。之后我們修改路由中用戶ID為 2 ,然后再次刷新瀏覽器,可以看到,這次同時出現了 Edit Post 和 Delete Post 兩個鏈接,說明我們定義的權限控制起作用了。

Laravel5.1框架自帶權限控制系統 ACL用法分析

希望本文所述對大家基于Laravel框架的PHP程序設計有所幫助。

原文鏈接:https://blog.csdn.net/luyaran/article/details/53539022

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 希岛爱理av一区二区三区 | 久久久久综合狠狠综合日本高清 | 亚洲乱码日产精品一二三 | 亚洲国产综合在线 | 91精品视频免费在线观看 | 久久99精品国产自在现线 | 精品久久99 | 伊人一区二区三区 | 噜噜噜在线 | 中文字字幕一区二区三区四区五区 | 免费的一级视频 | 国产午夜精品久久久久久久 | 久久久91视频 | 中文字幕亚洲一区二区三区 | 亚洲综合国产 | 亚洲高清视频一区二区 | 91亚洲精品在线 | 成人激情视频免费在线观看 | www.青青草 | 91精品国产高清久久久久久久久 | 亚洲国产精品欧美一二99 | 国产精品久久久久久av公交车 | 日本午夜精品 | 欧美a网| 亚洲免费a| 国产高清在线看 | 91亚洲精品一区 | 亚洲视频中文字幕 | 久久在线看 | 国产精品久久久久久久久久久久午夜片 | 天堂va蜜桃一区二区三区漫画版 | 欧美三级网站 | 精品国产乱码久久久久久牛牛 | www.久| 久热99 | 欧美午夜一区二区 | 国产精品无码久久久久 | 一区二区欧美在线 | 国产a√| 亚洲a网| 国产精品无码久久久久 |