පරිශීලක කාර්යභාර සහ ප්රවේශ පාලනය (User Roles & Authorization)
පරිශීලකයෙක් ලොග් වී සිටීද යන්න (Authentication) පරීක්ෂා කිරීමෙන් ඔබ්බට ගොස්, එම පරිශීලකයාට යම් ක්රියාවක් කිරීමට **අවසර තිබේද** යන්න (Authorization) තීරණය කිරීමට Laravel Gates නම් ක්රමවේදය භාවිතා කර, 'Admin' සහ 'Cashier' සඳහා වෙන වෙනම ප්රවේශ මට්ටම් නිර්මාණය කිරීම.
මෙම සංකල්ප දෙක බොහෝ විට එකිනෙක පැටලෙන නමුත්, ඒවායේ පැහැදිලි වෙනසක් ඇත:
3 වන මොඩියුලයේදී අපි Authentication (Breeze මගින්) සම්පූර්ණ කළෙමු. දැන් අපි Authorization ක්රියාත්මක කරමු.
Laravel Gates යනු පරිශීලකයෙකුට යම් ක්රියාවක් කිරීමට අවසර තිබේද යන්න තීරණය කරන සරල Closure-based (function-based) ක්රමයකි. මේවා සාමාන්යයෙන් `AuthServiceProvider` නම් ගොනුවේ `boot()` method එක තුළ නිර්වචනය කරනු ලැබේ.
`app/Providers/AuthServiceProvider.php` ගොනුව විවෘත කර, `boot()` method එක තුළ පහත කේතය එක් කරන්න.
මෙම `access-admin-features` නම් Gate එක, ලොග් වී සිටින පරිශීලකයාගේ (`$user`) `role` එක 'admin' නම් `true` අගයක් ද, එසේ නොමැති නම් `false` අගයක් ද ආපසු ලබා දේ.
පියවර 1: `users` වගුවට `role` තීරුව එක් කිරීම
ඔබගේ `..._create_users_table.php` migration ගොනුව විවෘත කර, `password` තීරුවට පසුව `role` තීරුව එක් කරන්න. ඉන්පසු දත්ත සමුදාය refresh කරන්න (`php artisan migrate:fresh`).
පියවර 2: `AuthServiceProvider` හි Gate එක නිර්වචනය කිරීම
ඉහත උදාහරණයේ පෙන්වා ඇති පරිදි, `AuthServiceProvider.php` ගොනුවේ `access-admin-features` Gate එක නිර්වචනය කරන්න.
පියවර 3: Blade View එක තුළ Gate එක භාවිත කිරීම (`@can`)
Admin කෙනෙකුට පමණක් පෙනිය යුතු මෙනු අයිතම (menu items) හෝ බොත්තම් සැඟවීමට `@can` blade directive එක භාවිතා කළ හැක. ඔබගේ ප්රධාන navigation layout ගොනුව (`layouts/navigation.blade.php`) සංස්කරණය කරන්න.
පියවර 4: Controller එක තුළ Gate එක භාවිත කිරීම
යම් Controller method එකක් ක්රියාත්මක කිරීමට පෙර අවසරය පරීක්ෂා කිරීමට `authorize` method එක භාවිතා කළ හැක. `ReportController` හි `index` method එකේ ආරම්භයටම මෙම පේළිය එක් කරන්න.
පරීක්ෂා කිරීම: `php artisan migrate:fresh --seed` (seed එකක් ඇත්නම්) මගින් දත්ත සමුදාය නැවත සකසා, 'cashier' කෙනෙක් ලෙස ලියාපදිංචි වන්න. දැන්, වාර්තා පිටුවට (`/reports`) සෘජුවම පිවිසීමට උත්සාහ කරන්න. ඔබට **"403 | THIS ACTION IS UNAUTHORIZED"** ලෙස දෝෂ පණිවිඩයක් දිස්වන්නේ නම්, ඔබගේ Authorization පද්ධතිය සාර්ථකව ක්රියාත්මක වේ!