mdnayeemsarker / role-permission
A Laravel package for role-based permissions with section permissions.
1.0.0
2024-11-30 06:23 UTC
Requires
- php: >=8.1
- illuminate/database: ^8.0|^9.0|^10.0
- illuminate/support: ^8.0|^9.0|^10.0
README
This package provides RolePermission for Laravel applications.
Installation
To install the package, use Composer:
composer require mdnayeemsarker/role-permission
Service Provider Registration
In your Laravel project’s config/app.php, add the RolePermissionServiceProvider to the providers array if it’s not already there:
'providers' => [ // Other service providers... Mdnayeemsarker\RolePermission\MnsRpServiceProvider::class, ],
Publishes Method
php artisan vendor:publish --provider="Mdnayeemsarker\RolePermission\MnsRpServiceProvider"
Clear Cache & Autoload Files Again
php artisan config:clear php artisan cache:clear composer dump-autoload
Migrate
php artisan migrate
For testing make prepare db seeder or input some dummey data.
- for db seeder make RolePermissionsTableSeeder
public function run(): void { // Create some dummy roles Role::create(['name' => 'admin']); Role::create(['name' => 'editor']); Role::create(['name' => 'user']); // Create some dummy permissions Permission::create(['name' => 'view-dashboard', 'section' => 'admin']); Permission::create(['name' => 'edit-articles', 'section' => 'editor']); Permission::create(['name' => 'view-articles', 'section' => 'user']); Permission::create(['name' => 'delete-articles', 'section' => 'admin']); // Create some dummy role permission RolePermission::create(['role_id' => '1', 'permission_id' => '1']); RolePermission::create(['role_id' => '1', 'permission_id' => '4']); }
Prepare DatabaseSeeder.php file (databse/seeders)
public function run(): void { // another code $this->call([ // another seeder RolePermissionsTableSeeder::class, ]); }
Run DB Seeder command
php artisan db:seed
Update User.php in (App\Models)
// Define the relationship with Role (Override) public function role() { return $this->belongsToMany(Role::class, 'user_roles'); } // Define the relationship with Permissions public function allPermissions() { return $this->role->flatMap->permissions; }
Assign user role
Go to your controller
$user = Auth::user(); $role = Role::find(1); // Find the role you want to assign $user->role()->attach($role); // Assign the role
Check user all permission
$user = Auth::user(); if ($user && $user->role()->exists()) { dd($user->allPermissions()); // this retuens user all permission } else { dd('User has not any permission'); // set some permission accrose user and check }
Check User all permission with permission name
$user = Auth::user(); if ($user && $user->role()->exists()) { $permissions = $user->allPermissions(); $permissionNames = $permissions->pluck('name'); dd([$permissions, $permissionNames]); // Debugging } else { $permissions = []; dd($permissions); // Debugging }
Check permission in contoller
- Fist make and Helper (app/Helper/PermissionHelper.php)
<?php namespace App\Helpers; use Illuminate\Support\Facades\Auth; class PermissionHelper { /** * Check if the authenticated user has a specific permission. * * @param string $permission * @return bool */ public static function hasPermission($ppermissionName) { $user = Auth::user(); if ($user && $user->role()->exists()) { $permissions = $user->allPermissions(); return $permissions->contains('name', $permissionName); } return false; } }
- Controller check permission
if (PermissionHelper::hasPermission('delete-articles')) { dd('Permission granted: OK'); }else{ dd('Permission not granted: NOT'); }
For check permission in blade
- First create an Helper.php (app/Http/Helper.php) and set composer.json autoload
"autoload": { "files": [ "app/Http/Helper.php" ] }
- Helper function code
if (!function_exists('hasPermission')) { /** * Check if the authenticated user has a specific permission. * * @param string $permission * @return bool */ function hasPermission($permissionName) { $user = Auth::user(); if ($user && $user->role()->exists()) { $permissions = $user->allPermissions(); return $permissions->contains('name', $permissionName); } return false; } }
- blade file code
@if (hasPermission('delete-articles'))
Permission granted: OK
@else
Permission not granted: NOT
@endif
Getting To Know MD NAYEEM SARKER
- Feel free to learn more about MD NAYEEM SARKER.
License
MIT © MD NAYEEM SARKER