Skip to content

Hi You, I am Tade

  • About
  • Donate
  • Privacy policy
    • About
    • Donate
    • Privacy policy

Phân quyền trong Laravel với Laravel permission

  • Hoàng Thức
  • Aug 4, 2020

Laravel permission cho phép chúng ta chia ra 2 thành phần là Vai trò (role) và quyền (permission).

1.Cài đặt

  • Cài đặt Laravel 5.8 hoặc cao hơn
  • Nếu bạn đang có sẵn file config/permission.php bạn phải đổi tên hoặc xóa ngay, bởi vì khi setup thì package sẽ được publishes vào config/permission.php

Nếu thỏa mãn 2 điều kiện trên rồi chúng ta chạy câu lệnh dưới:


composer require spatie/laravel-permission

Sau đó, trong config/app.php chúng ta add service provide cho package như sau:


'providers' => [ // ... Spatie\Permission\PermissionServiceProvider::class, ];

Sau đó, publish migration thông qua lệnh:


php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"

Chạy lệnh php artisan migrate và chúng ta sẽ có các bảng như roles, permissions, role_has_permissions, model_has_roles và model_has_permission

 

2.Tạo Roles và Permissions

Tạo file mới  /database/seeds/PermissionsDemoSeeder.php và code như ví dụ bên dưới


use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
use Spatie\Permission\PermissionRegistrar;

class PermissionsDemoSeeder extends Seeder
{
/**
* Create the initial roles and permissions.
*
* @return void
*/
public function run()
{
// Reset cached roles and permissions
app()[PermissionRegistrar::class]->forgetCachedPermissions();

// create permissions
Permission::create(['name' => 'edit articles']);
Permission::create(['name' => 'delete articles']);
Permission::create(['name' =>; 'publish articles']);
Permission::create(['name' => 'unpublish articles']);

// create roles and assign existing permissions
$role1 = Role::create(['name' > 'writer']);
$role1->givePermissionTo('edit articles');
$role1->givePermissionTo('delete articles');

$role2 = Role::create(['name' => 'admin']);
$role2->givePermissionTo('publish articles');
$role2->givePermissionTo('unpublish articles');

$role3 = Role::create(['name' => 'super-admin']);
// gets all permissions via Gate::before rule; see AuthServiceProvider

// create demo users
$user = Factory(App\User::class)->create([
'name' => 'Example User',
'email' => 'test@example.com',
]);
$user->assignRole($role1);

$user = Factory(App\User::class)->create([
'name' => 'Example Admin User',
'email' => 'admin@example.com',
]);
$user->assignRole($role2);

$user = Factory(App\User::class)->create([
'name' => 'Example Super-Admin User',
'email' => 'superadmin@example.com',
]);
$user->assignRole($role3);
}
}

Tiếp theo khỏi tạo cơ sở dữ liệu


php artisan db:seed --class=PermissionsDemoSeeder

3.Trao quyền trực tiếp cho một user
Bạn có thể giao một quyền cho một user như sau:

$user->givePermissionTo('edit articles'); // giao quyền edit articles cho một user nào đó

// nhiều quyền cùng lúc
$user->givePermissionTo('edit articles', 'delete articles');

// dán 1 mảng 
$user->givePermissionTo(['edit articles', 'delete articles']);

// xóa 1 quyền
$user->revokePermissionTo('edit articles');

// thêm quyền
$user->syncPermissions(['edit articles', 'delete articles']);

//Kiểm tra quyền
$user->hasPermissionTo('edit articles');

4.Trao quyền thông qua roles
Một roles có thể được trao cho bất cứ users nào bằng cách :

$user->assignRole('writer');

// set nhiều vai trò $user->assignRole('writer', 'admin'); 
// dán 1 mảng $user->assignRole(['writer', 'admin']);
// xóa vai trò
$user->removeRole('writer');
//check xem vai tro đang cần tìm bằng cách :
$user->hasRole('writer');
// thêm vai trò và clear các vai trò có sẳn từ trước
$user->syncRoles('admin');

5.Sử dụng với middleware
Bạn có thể sử dụng can như một mặc định để giới hạn quyền truy cập cho trang web bằng cách :

Route::group(['middleware' => ['can:publish articles']], function () { // });

Hoặc nếu bạn không muốn sử dụng mặc định, Laravel permission mang đến cho chúng ta các middleware RoleMiddleware, PermissionMiddleware and RoleOrPermissionMiddleware. Để sử dụng, bạn cần thêm vào app/Http/Kernel.php file như sau:

protected $routeMiddleware = [ 
// ... 
'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class, 
'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class, 
'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class, 
];

Sau đó chúng ta có thể sữ dung các route:

// Chỉ có role là super-admin mới có thể truy cập vào các route của group này 
Route::group(['middleware' => ['role:super-admin']], function () { // }); 
// Chỉ có permission là publish articles thì mới có thể truy cập vào các route của group này 
Route::group(['middleware' => ['permission:publish articles']], function () { // }); 
// Chỉ có role là super-admin hoặc permission là publish articles thì mới có thể truy cập vào các route của group này 
Route::group(['middleware' => ['role:super-admin','permission:publish articles']], function () { // }); 
Route::group(['middleware' => ['role_or_permission:super-admin|edit articles']], function () { // });

// Đối với GET;
Route::get('/admin', function(){
    return view('admin.dashboard');
})->name('admin')->middleware('auth')->middleware(['role:administrator']);
// auth để kiềm tra đăng nhập và role để kiểm tra vai trò. 
// Tất cả những quyền không được phép truy cập sẽ mặc định trả về page 403: 

6.Sử dụng trực tiếp trên Blade
Đối với phần view, để hiển thị view tương ứng cho các vai trò, chúng ta có thể sử dụng @can, @cannot, @canany, and @guest để kiểm tra việc xem thông tin hiển thị trên một trang web. Chúng ta làm như sau:

@can('edit articles') 
// 
@endcan

// hoặc

@if(auth()->user()->can('edit articles') && $some_other_condition)
  //
@endif

// hoặc
@role('writer')
    I am a writer!
@else
    I am not a writer...
@endrole

 // Kiem tra nhiều hơn như sau:
@hasanyrole($collectionOfRoles)
    Tôi có một hoặc nhiều roles trong điều kiện này
@else
   Tôi không thuộc roles nào ở trên
@endhasanyrole

// hoặc

@hasanyrole('writer|admin')
    Tôi là một writer hoặc admin hoặc cả hai :D
@else
   Tôi không là writer cũng không là admin
@endhasanyrole

Vừa rồi mình đã giới thiệu 1 số vấn đề cớ bản trong việc sử dụng package spatie/laravel-permission  trong Laravel để làm tính năng phân quyền. Mong các bạn có thể áp dụng dễ dàng.
Chúc các bạn ngày vui vẻ.

 

    Tags:
  • Laravel
  • Php
    Share

Post navigation

←Previous:
Next:→

390 thoughts on “Phân quyền trong Laravel với Laravel permission”

  1. Pingback: is duloxetine used for neuropathy
  2. Pingback: spiraldynamics
  3. Pingback: live sex cams
  4. Pingback: live sex cams
  5. Pingback: live sex cams
  6. Pingback: Spiral Dynamics
  7. Pingback: can you have alcohol with ciprofloxacin 500 mg
  8. Pingback: cephalexin for acne
  9. Pingback: freeze dried candy
  10. Pingback: bactrim dosage 400/80
  11. Pingback: side effects of bactrim ds
  12. Pingback: frt trigger
  13. Pingback: vxi.su
  14. Pingback: soluciones fiscales mexico
  15. Pingback: prestanombres
  16. Pingback: 늑대닷컴
  17. Pingback: Wild symbol
  18. Pingback: One Peace AMV
  19. Pingback: nangs sydney
  20. Pingback: superslot
  21. Pingback: web designer Singapore
  22. Pingback: allgame
  23. Pingback: 918kiss
  24. Pingback: หวย24
  25. Pingback: Best anti age skincare routine
  26. Pingback: clothes french bulldog
  27. Pingback: pg slot
  28. Pingback: leak detection london
  29. Pingback: AI Attorney
  30. Pingback: regles 421
  31. Pingback: cybersécurité
  32. Pingback: Raahe Guide
  33. Pingback: aplikasi slot online tema sejarah
  34. Pingback: judi slot
  35. Pingback: upstate hotels
  36. Pingback: resort lake placid
  37. Pingback: dietary supplements
  38. Pingback: electronic visa
  39. Pingback: 300 win mag ammo
  40. Pingback: 30-30-winchester-ammo
  41. Pingback: sicarios madrid
  42. Pingback: clavulanic acid is combined with amoxicillin because
  43. Pingback: neurontin hair loss
  44. Pingback: diltiazem er side effects
  45. Pingback: diclofenac sodium topical solution
  46. Pingback: effexor vs pristiq
  47. Pingback: contrave xenical or saxenda
  48. Pingback: ddavp nasal spray haemophilia
  49. Pingback: difference between citalopram and escitaloprám
  50. Pingback: does augmentin treat uti
  51. Pingback: flomax dental treatment
  52. Pingback: ezetimibe bioequivalence studies
  53. Pingback: flexeril and tylenol
  54. Pingback: depakote mechanism of action
  55. Pingback: cozaar vs diovan
  56. Pingback: SaaS Contract Lawyer
  57. Pingback: itsMasum.Com
  58. Pingback: itsMasum.Com
  59. Pingback: how to avoid weight gain on amitriptyline
  60. Pingback: aripiprazole 2mg tablets
  61. Pingback: allopurinol costs
  62. Pingback: aspirin heart attack
  63. Pingback: deux categorie de logiciels malveillants
  64. Pingback: salaire d'un ingénieur
  65. Pingback: soc cybersécurité
  66. Pingback: FÜHRERSCHEIN SCHWEIZ (CH)
  67. Pingback: quick nangs delivery
  68. Pingback: Nangs delivery sydney
  69. Pingback: Skywhip tanks
  70. Pingback: site
  71. Pingback: spisok
  72. Pingback: Plombier Tours
  73. Pingback: what is bupropion xl 150 mg used for
  74. Pingback: celebrex generic side effects
  75. Pingback: is celecoxib a controlled substance
  76. Pingback: buspar drug class
  77. Pingback: augmentin allergy
  78. Pingback: itsmasum.com
  79. Pingback: itsmasum.com
  80. Pingback: omegle text chat
  81. Pingback: stranger chat
  82. Pingback: itsmasum.com
  83. Pingback: itsmasum.com
  84. Pingback: list
  85. Pingback: blue french bulldog pups for sale
  86. Pingback: robaxin 750 mg tablet
  87. Pingback: semaglutide 70 units
  88. Pingback: repaglinide tablets usp
  89. Pingback: acarbose zulassung
  90. Pingback: remeron tinnitus
  91. Pingback: actos degradantes
  92. Pingback: nexium vs protonix
  93. Pingback: how long does abilify stay in your system
  94. Pingback: joker gaming
  95. Pingback: how long does venlafaxine take to kick in
  96. Pingback: Film institutionnel Nantes
  97. Pingback: sandoz-tamsulosin 0.4 mg side effects
  98. Pingback: stromectol sales
  99. Pingback: voltaren gel over counter
  100. Pingback: muscat jobs
  101. Pingback: shanghai jobs
  102. Pingback: synthroid osteoarthritis
  103. Pingback: helsinki jobs
  104. Pingback: shenzhen jobs
  105. Pingback: london jobs
  106. Pingback: 099 pill spironolactone
  107. Pingback: can you take tizanidine with ibuprofen
  108. Pingback: sitagliptin 60
  109. Pingback: https://w-495.ru/
  110. Pingback: russian-federation
  111. Pingback: tadalafil prostate
  112. Pingback: how long does levitra stay in your system
  113. Pingback: when should a store close down a pharmacy?
  114. Pingback: cialis online pills
  115. Pingback: levitra online price
  116. Pingback: sildenafil blood pressure
  117. Pingback: boots pharmacy doxycycline
  118. Pingback: sildenafil 20 mg para que sirve
  119. Pingback: ivermectin 0.1
  120. Pingback: where to buy viagra in india
  121. Pingback: vardenafil interactions
  122. Pingback: what is vardenafil hcl used for
  123. Pingback: price of ivermectin tablets
  124. Pingback: can you buy female viagra in australia
  125. Pingback: stromectol order online
  126. Pingback: when will tadalafil be generic
  127. Pingback: ivermectin buy
  128. Pingback: tadalafil vs sildenafil
  129. Pingback: stromectol tablets buy online
  130. Pingback: ivermectin 1%cream
  131. Pingback: https://bit.ly/patsany-4-sezon-2024
  132. Pingback: batmanapollo.ru
  133. Pingback: bit.ly/kto-takoy-opsuimolog
  134. Pingback: prednisone covid
  135. Pingback: amoxicillin vs azithromycin
  136. Pingback: lisinopril 40 mg para que sirve
  137. Pingback: gabapentin side effects in women
  138. Pingback: augmentin and alcohol webmd
  139. Pingback: modafinil nedir
  140. Pingback: live adult webcams
  141. Pingback: amateur webcams
  142. Pingback: nude chat
  143. Pingback: live sex webcams
  144. Pingback: Kampus Tertua
  145. Pingback: how long does it take for doxycycline to work for bacterial infection
  146. Pingback: how does lyrica make you feel
  147. Pingback: ofloxacin vs ciprofloxacin
  148. Pingback: trazodone headache
  149. Pingback: keflex with or without food
  150. Pingback: can i take 3000 mg of metformin a day
  151. Pingback: how long does it take for cephalexin to work
  152. Pingback: texas french bulldog puppies
  153. Pingback: order valtrex online
  154. Pingback: Queen Arwa University World University Rankings THE
  155. Pingback: جامعة الملكة أروى للعلوم الاكاديمية
  156. Pingback: A Yemeni Arab Journal Indexed by Scopus and ISI
  157. Pingback: Queen Arwa University ROR ID: 03ygqq617
  158. Pingback: Kuliah Mudah
  159. Pingback: 918kiss
  160. Pingback: https://bit.ly/patsany-4-sezon-vse-seriy-patsany-4-sezon-2024
  161. Pingback: shorts
  162. Pingback: tamoxifen ovarian cancer
  163. Pingback: pg slot
  164. Pingback: 918kiss
  165. Pingback: yaltalife.ru
  166. Pingback: kinogo
  167. Pingback: rasschitat dizayn cheloveka onlayn
  168. Pingback: raschet karty dizayn cheloveka
  169. Pingback: humandesignplanet.ru
  170. Pingback: human design
  171. Pingback: Opsumiologist
  172. Pingback: Psychologist #1 in the World
  173. Pingback: Best Psychologist in the World
  174. Pingback: https://psyholog_online_just_now.t.me
  175. Pingback: https://t.me/s/psyholog_online_just_now
  176. Pingback: printsipy forda
  177. Pingback: dizain-cheloveka
  178. Pingback: Bokeo Thailand
  179. Pingback: itme.xyz
  180. Pingback: ItMe.Xyz
  181. Pingback: ItMe.Xyz
  182. Pingback: ItMe.Xyz
  183. Pingback: FB URL Shortener
  184. Pingback: Dropbox URL Shortener
  185. Pingback: Instagram URL Shortener
  186. Pingback: ItMe.Xyz
  187. Pingback: https://bit.ly/kholostyak-13-kholostyak-2024-kholostyak-dyvytysya-onlayn
  188. Pingback: 10000
  189. Pingback: 9gm.ru
  190. Pingback: hdorg2.ru
  191. Pingback: raso.su
  192. Pingback: ItMe.Xyz
  193. Pingback: sulfasalazine out of system
  194. Pingback: what does neurontin show up as on a drug screen
  195. Pingback: celebrex prescription savings card
  196. Pingback: para que se usa el celecoxib
  197. Pingback: efectos del tegretol a largo plazo
  198. Pingback: gabapentin seponering
  199. Pingback: carbamazepine coumadin interaction
  200. Pingback: why take acetaminophen instead of ibuprofen
  201. Pingback: is motrin good for headache
  202. Pingback: where to buy pyridostigmine for sale
  203. Pingback: diclofenac sodium ec 75
  204. Pingback: imitrex side effects with alcohol
  205. Pingback: mestinon in der schwangerschaft
  206. Pingback: elavil and benadryl interaction
  207. Pingback: what medications can you not take with amitriptyline
  208. Pingback: mebeverine and warfarin interaction
  209. Pingback: indomethacin addictive
  210. Pingback: cilostazol mechanism action
  211. Pingback: can i take sumatriptan before a colonoscopy
  212. Pingback: can i take maxalt and xanax
  213. Pingback: lioresal 10 nebenwirkungen
  214. Pingback: can you take meloxicam and advil together
  215. Pingback: imuran side effects tingling
  216. Pingback: flamic piroxicam gel
  217. Pingback: rizatriptan benzoate analysis
  218. Pingback: baclofen tabletten ohne rezept
  219. Pingback: does imdur cause headaches
  220. Pingback: mobic for dogs
  221. Pingback: azathioprine induced lymphoma
  222. Pingback: iwbc.ru
  223. Pingback: djss.ru
  224. Pingback: periactin patient information
  225. Pingback: dominos artane number
  226. Pingback: can i get ketorolac without a prescription
  227. Pingback: drug interactions tizanidine
  228. Pingback: tizanidine zanaflex tablets
  229. Pingback: buy generic toradol tablets
  230. Pingback: cyproheptadine anticholinergic
  231. Pingback: pstat
  232. Pingback: ddfr.ru
  233. Pingback: imkor.ru
  234. Pingback: edu-url-http.ru
  235. Pingback: Free-Proxy-socks5-socks4.ru
  236. Pingback: iu0000ytre
  237. Pingback: sitnikov
  238. Pingback: anatoliy-alekseyevich-derkach.ru
  239. Pingback: My Homepage
  240. Pingback: dilts.g-u.su
  241. Pingback: xblx.ru
  242. Pingback: r2f.ru
  243. Pingback: psy
  244. Pingback: 439W6fo
  245. Pingback: mzplay
  246. Pingback: wix seo expert
  247. Pingback: chanel dog bowl
  248. Pingback: izcalli
  249. Pingback: blue french bulldog
  250. Pingback: free cam girls
  251. Pingback: cheap adult webcams
  252. Pingback: sex chat
  253. Pingback: cheap video chat
  254. Pingback: massachusetts boston terriers
  255. Pingback: houston tx salons
  256. Pingback: floodle puppies for sale
  257. Pingback: floodle
  258. Pingback: how to get my dog papers
  259. Pingback: french bulldog near me for sale
  260. Pingback: fort lee acupuncture
  261. Pingback: cuautitlan izcalli clima
  262. Pingback: clima en chimalhuacan
  263. Pingback: atizapán de zaragoza clima
  264. Pingback: clima en chimalhuacan
  265. Pingback: atizapán de zaragoza clima
  266. Pingback: atizapán de zaragoza clima
  267. Pingback: cuautitlan izcalli clima
  268. Pingback: atizapán de zaragoza clima
  269. Pingback: french bulldog adoption
  270. Pingback: cuautitlan izcalli clima
  271. Pingback: clima en chimalhuacan
  272. Pingback: ivf in cancun mexico
  273. Pingback: Phoenix
  274. Pingback: Lenze
  275. Pingback: french bulldogs puppies for sale in texas
  276. Pingback: بطاقات ايوا
  277. Pingback: cheap nude chat
  278. Pingback: cheap amateur webcams
  279. Pingback: free cam girls
  280. Pingback: micro american bullies
  281. Pingback: isla mujeres luxury rentals
  282. Pingback: play net app
  283. Pingback: rent a yacht in cancun
  284. Pingback: dog yorkie mix
  285. Pingback: 무료스포츠중계
  286. Pingback: 라이브스코어
  287. Pingback: best probiotic for french bulldogs
  288. Pingback: web3 gaming
  289. Pingback: esports domains
  290. Pingback: mw2 ESP
  291. Pingback: cs2 wallhack
  292. Pingback: escape from tarkov cheats
  293. Pingback: securecheats marvel hacks
  294. Pingback: candy factory
  295. Pingback: grey frenchies
  296. Pingback: cheap french bulldog puppies under $500
  297. Pingback: lilac frenchies
  298. Pingback: linh hoang
  299. Pingback: french bulldogs to rescue
  300. Pingback: 늑대닷컴
  301. Pingback: family ho
  302. Pingback: 늑대닷컴
  303. Pingback: dog probiotic chews on amazon
  304. Pingback: dr kim acupuncture
  305. Pingback: we buy french bulldogs
  306. Pingback: linh hoang
  307. Pingback: mexican candy store near me
  308. Pingback: mexican candy store near me
  309. Pingback: mexican candy store near me
  310. Pingback: mexican candy store near me
  311. Pingback: french bulldog texas
  312. Pingback: french bulldog purchase
  313. Pingback: chanel bucket hat
  314. Pingback: coco chanel dog collar
  315. Pingback: playnet
  316. Pingback: crypto news
  317. Pingback: bjj houston tx
  318. Pingback: bjj jiu jitsu magnolia texas
  319. Pingback: bjj jiu jitsu cypress texas
  320. Pingback: boston terrier french bulldog mix
  321. Pingback: probiotics for english bulldogs
  322. Pingback: generic of hydroxychloroquine
  323. Pingback: albyterol.com
  324. Pingback: How To Get My Dog Papers
  325. Pingback: How To Obtain Dog Papers
  326. Pingback: Dog Papers
  327. Pingback: Dog Breed Registries
  328. Pingback: Dog Papers
  329. Pingback: How To Get My Dog Papers
  330. Pingback: vidalista.beauty
  331. Pingback: Dog Registry
  332. Pingback: How To Get My Dog Papers
  333. Pingback: How To Obtain Dog Papers
  334. Pingback: Dog Papers
  335. Pingback: How To Get My Dog Papers
  336. Pingback: Dog Breed Registries
  337. Pingback: Dog Papers
  338. Pingback: Dog Papers
  339. Pingback: Dog Papers
  340. Pingback: Forum
  341. Pingback: Dog Registry
  342. Pingback: Dog Papers
  343. Pingback: Dog Registry
  344. Pingback: Dog Registry
  345. Pingback: Bulk URL Shortener
  346. Pingback: sugar land seo company
  347. Pingback: best seo companies in houston
  348. Pingback: french pitbull
  349. Pingback: French Bulldog Adoption
  350. Pingback: French Bulldog Adoption
  351. Pingback: French Bulldog Rescue
  352. Pingback: French Bulldog Rescue
  353. Pingback: how much does bimatoprost cost
  354. Pingback: priligy 60 mg buy
  355. Pingback: t.me/s/psy_chat_online
  356. Pingback: will 25 mg viagra work for me
  357. Pingback: kamagra
  358. Pingback: Sochi-psiholog-Russia
  359. Pingback: bulldog shih tzu mix
  360. Pingback: clima en atizapán de zaragoza
  361. Pingback: yorkie poo breeding
  362. Pingback: viahelpmen.wordpress.com
  363. Pingback: golf cart rental isla mujeres
  364. Pingback: kamajelly.wordpress.com
  365. Pingback: viasuper.wordpress.com
  366. Pingback: vidalforman.wordpress.com
  367. Pingback: grey french bulldog
  368. Pingback: magnolia bjj
  369. Pingback: super avana tablets
  370. Pingback: mexican candy shop
  371. Pingback: instagram.com/korotkovlakanfreud
  372. Pingback: cathopic.com/@lipitor
  373. Pingback: 5yucMCMAAAAJ
  374. Pingback: buy fildena extra power
  375. Pingback: vigrakrs.com
  376. Pingback: French Bulldog For Sale
  377. Pingback: Frenchie Puppies
  378. Pingback: Frenchie Puppies
  379. Pingback: French Bulldog Puppies Near Me
  380. Pingback: French Bulldog For Sale
  381. Pingback: French Bulldog For Sale
  382. Pingback: atvip.ru
  383. Pingback: 0410.ru
  384. Pingback: myprin92.ru
  385. Pingback: levitra vs cialis
  386. Pingback: Ïñèõîëîã, ïñèõîòåðàïåâò, ïñèõèàòð, ïñèõîàíàëèòèê
  387. Pingback: ekzistenczialnyj
  388. Pingback: Kim Miyang Acupuncturist & Herbalist
  389. Pingback: french bulldogs for sale ca
  390. Pingback: frenchie for sale houston

Comments are closed.

©2025 Hi You, I am Tade / Designed & Built by WPFound