Bởi vì tất cả các quyền sẽ được đăng ký trên cổng của Laravel, bạn có thể kiểm tra xem người dùng có quyền hay không bằng hàm can
mặc định của Laravel
$user->can['edit articles'];
hỗ trợ chúng tôi
Chúng tôi đầu tư rất nhiều tài nguyên vào việc tạo ra các gói nguồn mở tốt nhất trong lớp. Bạn có thể hỗ trợ chúng tôi bằng cách mua một trong những sản phẩm trả phí của chúng tôi
Chúng tôi đánh giá cao việc bạn gửi cho chúng tôi một tấm bưu thiếp từ quê hương của bạn, đề cập đến [những] gói bạn đang sử dụng của chúng tôi. Bạn sẽ tìm thấy địa chỉ của chúng tôi trên trang liên hệ của chúng tôi. Chúng tôi xuất bản tất cả các bưu thiếp nhận được trên bức tường bưu thiếp ảo của chúng tôi
thử nghiệm
composer test
Nhật ký thay đổi
Vui lòng xem CHANGELOG để biết thêm thông tin về những thay đổi gần đây
Đóng góp
Vui lòng xem ĐÓNG GÓP để biết chi tiết
Bảo vệ
Nếu bạn phát hiện ra bất kỳ vấn đề nào liên quan đến bảo mật, vui lòng gửi email tới security@spatie. thay vì sử dụng trình theo dõi vấn đề
Bưu thiếp
Bạn được tự do sử dụng gói này, nhưng nếu nó được sử dụng trong môi trường sản xuất của bạn, chúng tôi đánh giá cao việc bạn gửi cho chúng tôi một tấm bưu thiếp từ quê hương của bạn, đề cập đến [những] gói nào bạn đang sử dụng
Địa chỉ của chúng tôi là. Spatie, Kruikstraat 22, 2018 Antwerp, Bỉ
Chúng tôi xuất bản tất cả các bưu thiếp nhận được trên trang web của công ty chúng tôi
Tín dụng
- Chris Brown
- Freek Van der Herten
- Tất cả những người đóng góp
Gói này chủ yếu dựa trên các bài học Laracasts tuyệt vời của Jeffrey Way về quyền và vai trò. Mã ban đầu của anh ấy có thể được tìm thấy trong repo này trên GitHub
Đặc biệt cảm ơn Alex Vanderbist, người đã giúp đỡ rất nhiều với v2
và Chris Brown vì sự hỗ trợ lâu năm của anh ấy giúp chúng tôi duy trì gói hàng
Trong hướng dẫn này, chúng ta sẽ thấy laravel 8 vai trò và quyền của người dùng mà không cần gói. Vai trò và quyền là một phần quan trọng của nhiều trang web
Trong ví dụ về vai trò và quyền của người dùng laravel 8 này, chúng tôi không sử dụng bất kỳ loại gói nào như spatie/laravel-permission cho quyền của vai trò người dùng trong laravel. Nhưng bạn có thể sử dụng spatie/laravel-permission để tạo hướng dẫn về vai trò và quyền của người dùng trong laravel 8
Trong ví dụ này, bạn có thể cấp vai trò cho người dùng cụ thể và quyền truy cập vào tác vụ cụ thể. Trong hướng dẫn này, chúng tôi sẽ triển khai hướng dẫn về vai trò và quyền của người dùng trong laravel 8 từ đầu
Trong thế giới phát triển web, bạn sẽ thường bắt gặp các thuật ngữ "vai trò" và "quyền", nhưng những điều này có nghĩa là gì? . Một vai trò chỉ là một tập hợp các quyền
Để cung cấp cho điều này một chút ngữ cảnh, hãy lấy một ví dụ đơn giản về hệ thống quản lý nội dung [CMS]. Hệ thống có thể có nhiều quyền cơ bản, bao gồm các quyền sau
- Có thể tạo bài đăng trên blog
- Có thể cập nhật bài viết trên blog
- Có thể xóa bài đăng trên blog
- Có thể tạo người dùng
- Có thể cập nhật người dùng
- Có thể xóa người dùng
Hệ thống cũng có thể có các vai trò, chẳng hạn như sau
- biên tập viên
- Quản trị viên
Vì vậy, chúng tôi có thể cho rằng vai trò 'Biên tập viên' sẽ có quyền 'có thể tạo bài đăng trên blog', 'có thể cập nhật bài đăng trên blog' và 'có thể xóa bài đăng trên blog'. Tuy nhiên, họ sẽ không có quyền tạo, cập nhật hoặc xóa người dùng, trong khi quản trị viên sẽ có tất cả các quyền này
Sử dụng các vai trò và quyền như được liệt kê ở trên là một cách tuyệt vời để xây dựng một hệ thống có khả năng giới hạn những gì người dùng có thể xem và làm
Cách sử dụng Gói quyền Spatie Laravel
Có nhiều cách khác nhau để triển khai vai trò và quyền trong ứng dụng Laravel của bạn. Bạn có thể tự viết mã để xử lý toàn bộ khái niệm. Tuy nhiên, điều này đôi khi có thể rất tốn thời gian và trong hầu hết các trường hợp, sử dụng gói là quá đủ
Trong bài viết này, chúng ta sẽ sử dụng gói Laravel Permission từ Spatie
Cài đặt và cấu hình
Để bắt đầu sử dụng gói, chúng tôi sẽ cài đặt gói bằng lệnh sau
composer require spatie/laravel-permission
Bây giờ chúng tôi đã cài đặt gói, chúng tôi sẽ cần xuất bản tệp cấu hình và di chuyển cơ sở dữ liệu
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
Bây giờ chúng ta có thể chạy di chuyển để tạo các bảng mới trong cơ sở dữ liệu của mình
php artisan migrate
Giả sử rằng chúng tôi đang sử dụng các giá trị cấu hình mặc định và không thay đổi bất cứ điều gì trong gói
php artisan migrate
6, bây giờ chúng tôi sẽ có năm bảng mới trong cơ sở dữ liệu của mình
7 - Bảng này sẽ chứa tên của các vai trò trong ứng dụng của bạnphp artisan migrate
8 - Bảng này sẽ chứa tên của các quyền trong ứng dụng của bạnphp artisan migrate
9 - Bảng này sẽ chứa dữ liệu cho biết các quyền mà mô hình của bạn [e. g. ,php artisan migrate
0] cóuse Illuminate\Foundation\Auth\User as Authenticatable; use Spatie\Permission\Traits\HasRoles; class User extends Authenticatable { use HasRoles; // ... }
1 - Bảng này sẽ chứa dữ liệu cho biết vai trò nào mà người mẫu của bạn [e. g. ,use Illuminate\Foundation\Auth\User as Authenticatable; use Spatie\Permission\Traits\HasRoles; class User extends Authenticatable { use HasRoles; // ... }
0] cóuse Illuminate\Foundation\Auth\User as Authenticatable; use Spatie\Permission\Traits\HasRoles; class User extends Authenticatable { use HasRoles; // ... }
3 - Bảng này sẽ chứa dữ liệu hiển thị các quyền mà mỗi vai trò cóuse Illuminate\Foundation\Auth\User as Authenticatable; use Spatie\Permission\Traits\HasRoles; class User extends Authenticatable { use HasRoles; // ... }
Để hoàn tất quá trình cài đặt cơ bản, bây giờ chúng ta có thể thêm đặc điểm
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
// ...
}
4 vào mô hình của mìnhuse Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
// ...
}
Tạo vai trò và quyền
Để bắt đầu với việc thêm vai trò và quyền vào ứng dụng Laravel của mình, trước tiên chúng ta cần lưu trữ chúng trong cơ sở dữ liệu. Thật đơn giản để tạo một vai trò hoặc quyền mới bởi vì trong gói của Spatie, chúng chỉ là những mô hình.
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
// ...
}
5 và use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
// ...
}
6Vì vậy, điều này có nghĩa là nếu chúng tôi muốn tạo một vai trò mới trong hệ thống của mình, chúng tôi có thể làm như sau
$role = Role::create[['name' => 'editor']];
Chúng ta có thể tạo quyền theo cách tương tự
$permission = Permission::create[['name' => 'create-blog-posts']];
Trong hầu hết các trường hợp, bạn sẽ xác định các quyền trong mã của mình thay vì để người dùng ứng dụng của bạn tạo chúng. Tuy nhiên, bạn có thể sẽ có cách tiếp cận hơi khác với các vai trò. Bạn có thể muốn tự xác định tất cả các vai trò trong cơ sở mã của mình và không cung cấp cho người dùng bất kỳ khả năng nào để tạo vai trò mới. Mặt khác, bạn có thể tự tạo một số vai trò "người gieo hạt" [e. g. , Quản trị viên] và sau đó cung cấp cho người dùng của bạn chức năng thêm những cái mới. Quyết định này chủ yếu phụ thuộc vào những gì bạn đang cố gắng đạt được với hệ thống của mình và người dùng cuối là ai
Nếu bạn muốn thêm bất kỳ vai trò và quyền mặc định nào vào ứng dụng của mình, bạn có thể thêm chúng bằng trình tạo cơ sở dữ liệu. Có thể bạn sẽ muốn tạo một seeder dành riêng cho tác vụ này [có thể được gọi là
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
// ...
}
7]. Vì vậy, hãy bắt đầu bằng cách tạo seeder mới bằng cách sử dụng lệnh sauphp artisan make:seeder RoleAndPermissionSeeder
Điều này đáng lẽ phải tạo một tệp
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
// ...
}
8 mới. Trước khi chúng tôi thực hiện bất kỳ thay đổi nào đối với tệp này, chúng tôi cần nhớ cập nhật use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
// ...
}
9 để nó tự động gọi tệp hạt giống mới của chúng tôi bất cứ khi nào chúng tôi sử dụng lệnh $role = Role::create[['name' => 'editor']];
0namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run[]
{
// ...
$this->call[[
RoleAndPermissionSeeder::class,
]];
// ...
}
}
Bây giờ, chúng ta có thể cập nhật seeder mới để thêm một số vai trò và quyền mặc định vào hệ thống của chúng ta
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class RoleAndPermissionSeeder extends Seeder
{
public function run[]
{
Permission::create[['name' => 'create-users']];
Permission::create[['name' => 'edit-users']];
Permission::create[['name' => 'delete-users']];
Permission::create[['name' => 'create-blog-posts']];
Permission::create[['name' => 'edit-blog-posts']];
Permission::create[['name' => 'delete-blog-posts']];
$adminRole = Role::create[['name' => 'Admin']];
$editorRole = Role::create[['name' => 'Editor']];
$adminRole->givePermissionTo[[
'create-users',
'edit-users',
'delete-users',
'create-blog-posts',
'edit-blog-posts',
'delete-blog-posts',
]];
$editorRole->givePermissionTo[[
'create-blog-posts',
'edit-blog-posts',
'delete-blog-posts',
]];
}
}
Gán vai trò và quyền cho người dùng
Bây giờ chúng ta đã có vai trò và quyền trong cơ sở dữ liệu của mình và sẵn sàng để được chỉ định, chúng ta có thể xem cách chúng ta có thể chỉ định chúng cho người dùng của mình
Trước tiên, hãy xem việc gán vai trò mới cho người dùng đơn giản như thế nào
$user = User::first[];
$user->assignRole['Admin'];
Chúng tôi cũng có thể cấp quyền cho vai trò đó để người dùng cũng sẽ có quyền đó
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
0Có thể là bạn có thể cung cấp chức năng trong ứng dụng của mình để cấp quyền trực tiếp cho người dùng, cũng như [hoặc thay vì] chỉ định vai trò cho họ. Đoạn mã dưới đây cho thấy cách chúng ta có thể làm điều này
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
1Cùng với việc có thể chỉ định vai trò và quyền, bạn sẽ cần cung cấp chức năng xóa vai trò và thu hồi quyền của người dùng. Dưới đây là tổng quan nhanh về việc xóa vai trò khỏi người dùng dễ dàng như thế nào
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
2Chúng tôi cũng có thể xóa quyền khỏi người dùng và vai trò theo cách tương tự
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
3php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
4Hạn chế quyền truy cập dựa trên quyền
Bây giờ chúng ta đã có vai trò và quyền được lưu trữ trong cơ sở dữ liệu của mình và biết cách gán chúng cho người dùng của mình, chúng ta có thể xem cách thêm kiểm tra ủy quyền
Cách đầu tiên mà bạn có thể muốn thêm ủy quyền là sử dụng phần mềm trung gian
$role = Role::create[['name' => 'editor']];
1. Điều này được mặc định trong các bản cài đặt Laravel mới, vì vậy miễn là bạn chưa xóa nó khỏi $role = Role::create[['name' => 'editor']];
2 của mình, thì nó sẽ được đặt bí danh thành $role = Role::create[['name' => 'editor']];
3. Vì vậy, hãy tưởng tượng rằng chúng ta có một tuyến đường mà chúng ta muốn hạn chế quyền truy cập trừ khi người dùng được xác thực có phần mềm trung gian $role = Role::create[['name' => 'editor']];
4. Chúng tôi có thể thêm phần mềm trung gian vào tuyến đường riêng lẻphp artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
5Bạn có thể thấy rằng bạn có nhiều tuyến đường có liên quan đến nhau và dựa trên cùng một quyền. Trong trường hợp này, tệp tuyến đường của bạn có thể hơi lộn xộn do chỉ định phần mềm trung gian trên cơ sở từng tuyến đường. Vì vậy, thay vào đó, bạn có thể thêm ủy quyền bằng cách thêm phần mềm trung gian vào nhóm tuyến đường
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
6Điều đáng chú ý là nếu bạn muốn xác định phần mềm trung gian của mình trong các hàm tạo của bộ điều khiển, bạn cũng có thể sử dụng phần mềm trung gian
$role = Role::create[['name' => 'editor']];
3 ở đó. Bạn cũng có thể muốn sử dụng $role = Role::create[['name' => 'editor']];
6 trong các phương pháp điều khiển của mình để sử dụng phần mềm trung gian. Sử dụng phương pháp này sẽ yêu cầu bạn tạo cho các mô hình của mình, nhưng nếu được sử dụng đúng cách, kỹ thuật này có thể thực sự hữu ích để giữ cho ủy quyền của bạn rõ ràng và dễ hiểuBạn có thể thấy trong ứng dụng của mình rằng đôi khi bạn cần kiểm tra thủ công xem người dùng có quyền cụ thể hay không nhưng không từ chối hoàn toàn quyền truy cập. Chúng ta có thể làm điều này bằng cách sử dụng phương pháp
$role = Role::create[['name' => 'editor']];
7 trên mô hình use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
// ...
}
0Ví dụ: hãy tưởng tượng rằng chúng tôi có một biểu mẫu trong ứng dụng của mình cho phép người dùng cập nhật tên, địa chỉ email và mật khẩu của họ. Bây giờ, giả sử rằng chúng tôi muốn cấp cho người dùng có vai trò 'Trình chỉnh sửa' quyền chỉnh sửa người dùng nhưng không được thay đổi mật khẩu của người dùng khác. Chúng tôi sẽ chỉ cho phép người dùng cập nhật mật khẩu của người dùng khác nếu họ cũng có quyền
$role = Role::create[['name' => 'editor']];
9Trong ví dụ bên dưới, chúng tôi sẽ giả định rằng chúng tôi đang sử dụng phần mềm trung gian để chỉ cho phép người dùng có quyền
$permission = Permission::create[['name' => 'create-blog-posts']];
0 truy cập vào phương pháp này. Hãy xem cách chúng ta có thể triển khai điều này trong bộ điều khiển của mìnhphp artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
7Hiển thị và ẩn nội dung trong chế độ xem dựa trên quyền
Có khả năng là bạn sẽ muốn có thể hiển thị và ẩn các phần trong chế độ xem của mình dựa trên quyền của người dùng. Ví dụ: hãy tưởng tượng rằng chúng ta có một nút cơ bản trong chế độ xem Blade mà chúng ta có thể nhấn để xóa người dùng. Cũng giả sử rằng nút chỉ được hiển thị nếu người dùng có quyền
$permission = Permission::create[['name' => 'create-blog-posts']];
1Để hiện và ẩn nút này, cực kỳ đơn giản. Chúng ta có thể sử dụng chỉ thị _______18_______2 Blade
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
8Nếu người dùng có quyền
$permission = Permission::create[['name' => 'create-blog-posts']];
1, mọi thứ bên trong $permission = Permission::create[['name' => 'create-blog-posts']];
2 và $permission = Permission::create[['name' => 'create-blog-posts']];
5 sẽ được hiển thị. Nếu không, nó sẽ không được hiển thị trong chế độ xem Blade dưới dạng HTMLĐiều quan trọng cần nhớ là việc ẩn các nút, biểu mẫu và liên kết trong chế độ xem của bạn không cung cấp bất kỳ ủy quyền nào từ phía máy chủ. Bạn vẫn cần thêm quyền vào mã phụ trợ của mình [e. g. , trong bộ điều khiển của bạn hoặc sử dụng phần mềm trung gian như đã giải thích ở trên] để ngăn người dùng độc hại thực hiện bất kỳ yêu cầu nào đối với các tuyến đường chỉ dành cho người dùng có quyền cụ thể
Cách thêm quyền "Quản trị viên cấp cao"
Khi bạn tạo một ứng dụng, bạn có thể muốn thêm vai trò "quản trị viên cấp cao". Một ví dụ hoàn hảo cho điều này có thể là bạn cung cấp nền tảng phần mềm dưới dạng dịch vụ [SaaS] cho nhiều bên thuê. Bạn có thể muốn nhân viên của công ty mình có thể di chuyển xung quanh toàn bộ ứng dụng và xem các hệ thống của các đối tượng thuê khác nhau [có thể để gỡ lỗi và trả lời phiếu hỗ trợ]
Trước khi chúng tôi thêm kiểm tra quản trị viên cấp cao, có lẽ nên xem nhanh cách gói của Spatie sử dụng trong Laravel. Trong trường hợp bạn chưa bắt gặp chúng, các cổng thực sự đơn giản;
Khi bạn sử dụng một đoạn mã như
$permission = Permission::create[['name' => 'create-blog-posts']];
6, bạn đang sử dụng cổng của LaravelTrước khi bất kỳ cổng nào được chạy để kiểm tra quyền, chúng tôi có thể chạy mã mà chúng tôi xác định theo phương thức
$permission = Permission::create[['name' => 'create-blog-posts']];
7. Nếu bất kỳ lần đóng $permission = Permission::create[['name' => 'create-blog-posts']];
7 nào đang chạy trả về $permission = Permission::create[['name' => 'create-blog-posts']];
9, thì người dùng được phép truy cập. Nếu một đóng cửa $permission = Permission::create[['name' => 'create-blog-posts']];
7 trả về false, nó sẽ từ chối quyền truy cập. Nếu nó trả về php artisan make:seeder RoleAndPermissionSeeder
1, Laravel sẽ tiếp tục và chạy bất kỳ lần đóng $permission = Permission::create[['name' => 'create-blog-posts']];
7 nào còn tồn đọng và sau đó tự kiểm tra cổngTrong lớp
php artisan make:seeder RoleAndPermissionSeeder
3 trong gói, chúng tôi có thể thấy rằng kiểm tra quyền của chúng tôi được thêm vào dưới dạng $permission = Permission::create[['name' => 'create-blog-posts']];
7 để chạy trước cổng. Nếu gói xác định rằng người dùng có quyền [được chỉ định trực tiếp hoặc thông qua vai trò], gói sẽ trả về $permission = Permission::create[['name' => 'create-blog-posts']];
9. Nếu không, nó sẽ trả về php artisan make:seeder RoleAndPermissionSeeder
1 để có thể chạy bất kỳ lần đóng $permission = Permission::create[['name' => 'create-blog-posts']];
7 nào khácVì vậy, chúng ta có thể sử dụng phương pháp tương tự này để thêm kiểm tra vai trò quản trị viên cấp cao vào mã của mình. Chúng tôi có thể thêm mã vào
php artisan make:seeder RoleAndPermissionSeeder
8 của chúng tôiphp artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
9Bây giờ, bất cứ khi nào chúng tôi chạy một dòng mã như
$permission = Permission::create[['name' => 'create-blog-posts']];
6, chúng tôi sẽ kiểm tra xem người dùng có quyền $permission = Permission::create[['name' => 'create-blog-posts']];
1 hoặc vai trò namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run[]
{
// ...
$this->call[[
RoleAndPermissionSeeder::class,
]];
// ...
}
}
1 hay không. Nếu ít nhất một trong hai tiêu chí được thỏa mãn, người dùng sẽ được phép truy cập. Nếu không, người dùng sẽ bị từ chối truy cậpCách kiểm tra quyền và quyền truy cập
Có một bộ kiểm tra tự động bao gồm ủy quyền của bạn có thể cực kỳ tiện dụng. Nó giúp mang lại cho bạn sự tự tin rằng bạn đang bảo vệ các tuyến đường của mình đúng cách và chỉ những người dùng có quyền phù hợp mới có thể truy cập một số tính năng nhất định
Để xem làm thế nào chúng ta có thể viết một bài kiểm tra cho điều này, chúng ta sẽ bắt đầu bằng cách tưởng tượng một hệ thống đơn giản mà chúng ta có thể viết bài kiểm tra cho. Các bài kiểm tra sẽ chỉ ở mức siêu cơ bản và chắc chắn có thể nghiêm ngặt hơn, nhưng hy vọng nó sẽ cung cấp cho bạn ý tưởng về khái niệm cơ bản về kiểm tra quyền
Giả sử chúng ta có một CMS có hai vai trò mặc định. 'Quản trị viên' và 'Biên tập viên'. Chúng tôi cũng sẽ cho rằng hệ thống của chúng tôi không cho phép gán quyền trực tiếp cho người dùng. Thay vào đó, các quyền chỉ có thể được gán cho các vai trò và sau đó người dùng có thể được chỉ định một trong số các vai trò đó
Giả sử rằng theo mặc định, vai trò 'Quản trị viên' có quyền tạo/cập nhật/xóa người dùng và tạo/cập nhật/xóa các bài đăng trên blog. Giả sử rằng vai trò 'Biên tập viên' chỉ có quyền tạo/cập nhật/xóa các bài đăng trên blog
Bây giờ, hãy lấy ví dụ cơ bản về lộ trình và bộ điều khiển mà chúng ta có thể thực hiện để tạo người dùng mới
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
5php artisan migrate
1Như bạn có thể thấy, chúng tôi đã thêm quyền cho tuyến đường để chỉ những người dùng có quyền
$role = Role::create[['name' => 'editor']];
4 mới được phép truy cậpBây giờ, chúng ta có thể viết các bài kiểm tra của mình
php artisan migrate
2Mẹo thưởng
Nếu bạn sẽ tự tạo quyền và không cho phép người dùng của mình tạo quyền, thì việc lưu tên quyền và tên vai trò của bạn dưới dạng hằng số hoặc enum có thể khá hữu ích. Ví dụ: để xác định tên quyền của bạn, bạn có thể có một tệp như thế này
php artisan migrate
3Bằng cách sử dụng một tệp như thế này, bạn có thể dễ dàng tránh mọi lỗi chính tả có thể gây ra bất kỳ lỗi không mong muốn nào. Ví dụ: hãy tưởng tượng rằng chúng tôi có quyền được gọi là
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run[]
{
// ...
$this->call[[
RoleAndPermissionSeeder::class,
]];
// ...
}
}
3 và chúng tôi có dòng mã nàyphp artisan migrate
4Nếu bạn đang xem xét mã này trong một yêu cầu kéo hoặc tự viết mã đó, tôi sẽ không trách bạn vì nghĩ rằng nó hợp lệ. Tuy nhiên, chúng tôi đã bỏ qua
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run[]
{
// ...
$this->call[[
RoleAndPermissionSeeder::class,
]];
// ...
}
}
4 ở cuối giấy phép. Vì vậy, để tránh vấn đề này, chúng ta có thể sử dụng như sauphp artisan migrate
5Bây giờ, chúng tôi có thêm niềm tin rằng tên quyền là chính xác. Như một phần thưởng bổ sung, điều này cũng giúp bạn cực kỳ dễ dàng nếu bạn muốn xem bất kỳ nơi nào sử dụng quyền này, bởi vì IDE [e. g. , PHPStorm] sẽ có thể phát hiện tệp nào đang được sử dụng trong
Các gói và phương pháp thay thế
Ngoài việc sử dụng gói Cấp phép Laravel của Spatie, còn có các gói khác có thể được sử dụng để thêm vai trò và quyền cho ứng dụng của bạn. Ví dụ: bạn có thể sử dụng Bouncer hoặc Laratrust
Bạn có thể thấy rằng bạn cần nhiều chức năng riêng biệt và tính linh hoạt trong một số ứng dụng của mình hơn là các gói cung cấp. Trong trường hợp này, bạn có thể cần phải viết cách triển khai quyền và vai trò của riêng mình. Một điểm khởi đầu tốt cho việc này là sử dụng 'Cổng' và 'Chính sách' của Laravel, như đã đề cập trước đó
Phần kết luận
Hy vọng bài viết này đã cung cấp cho bạn một cái nhìn tổng quan về cách thêm quyền cho các ứng dụng Laravel của bạn bằng cách sử dụng gói Laravel Permission của Spatie. Nó cũng sẽ cung cấp cho bạn cái nhìn sâu sắc về cách có thể viết các bài kiểm tra tự động trong PHPUnit để kiểm tra xem các quyền của bạn có được thiết lập chính xác hay không