mdnayeemsarker/role-permission

A Laravel package for role-based permissions with section permissions.

1.0.0 2024-11-30 06:23 UTC

This package is auto-updated.

Last update: 2025-08-29 02:54:57 UTC


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

License

MIT © MD NAYEEM SARKER