PHP code example of radiatecode / laravel-permission-name-generator

1. Go to this page and download the library: Download radiatecode/laravel-permission-name-generator library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

radiatecode / laravel-permission-name-generator example snippets


use App\Http\Controllers\Controller;
use RadiateCode\LaravelRoutePermission\Contracts\WithPermissionGenerator;
use RadiateCode\LaravelRoutePermission\Traits\PermissionGenerator;

class DepartmentController extends Controller implements WithPermissionGenerator
{
    use PermissionGenerator;
   
    public function __construct()
    {
         $this->permissionsTitle('Department Crud Permissions')
            ->permissionsExclude('index');// index associate route won't be generated as permission names
    }
}

use App\Http\Controllers\Controller;
use App\Http\Controllers\Controller\DepartmentController;
use RadiateCode\LaravelRoutePermission\Contracts\WithPermissionGenerator;
use RadiateCode\LaravelRoutePermission\Traits\PermissionGenerator;

class DesignationController extends Controller implements WithPermissionGenerator
{
    use PermissionGenerator;
   
    public function __construct()
    {
        $this->permissionsAppendTo(DepartmentController::class);
    }
}

>   $request->get('permissions');  // array of permissions
> 

use RadiateCode\PermissionNameGenerator\Permissions;
use RadiateCode\PermissionNameGenerator\Facades\PermissionsView;
use App\Models\Role;

class RoleController extends Controller
{
    public function permissionsShow($id)
    {
        $role = Role::query()->findOrFail($id);

        // generate permissions from routes
        $permissions = Permissions::make()->fromRoutes()->get();
        
        return PermissionsView::make('app.role.permissions')
            ->withPermissions($permissions) 
            ->markRolePermissions( // helps to mark the stored role's permissions in the view
                $role->role_name,
                json_decode($role->role_permissions), // assume role permissions stored as json encoded
                route('create-role-permission', $role->id) // permission save url for a role
            )->render();
    }
}

Route::post('/role/{id}/permissions/create',[RoleController::class,'permissionStore'])->name('create-role-permission');

use \Illuminate\Http\Request;
class RoleController extends Controller
{
     public function permissionStore(Request $request,$id)
    {
        $role = Role::find($id);

        $role->role_permissions = json_encode($request->get('permissions')); // get the submitted permissions
        $role->save();

        return response()->json('success',201);
    }
}

'route-name-splitter-needle'    => '.',

'custom-permissions'  => [
    'panels' => [
        'user' => [
            // custom-permissions
        ],
        // 'admin' => [
        //    // custom-permission
        //],
    ]
],

'custom-permissions' = [
    'panels' => [
        'user' => [
            'user-permission' => ['active-user','inactive-user'],
            'bonus-permission' => [
                [
                    'name' => 'approve-own-department',
                    'text' => 'Approve Own Department'
                ],
            ]
        ],
        // 'admin' => [
        //    // custom-permission
        //],
    ]
]

'permission-generate-controllers' => [
    'panels' => [
        'user' => [
            'App\Http\Controllers',

            // sample
            // 'App\Http\Controllers\Api',
            // App\Http\Controllers\DepartmentController::class,
            // App\Http\Controllers\DesignationController::class,
        ],
        // 'admin' => [
        //    'App\Http\Controllers\Admin',
        //],
    ]
],

'exclude-controllers'           => [
    'panels' => [
        'user' => [
            'App\Http\Controllers\Auth', // exclude routes of all auth controllers
            // App\Http\Controller\Employee\EmployeeProfileController::class, 
        ],
        // 'admin' => [
        //    'App\Http\Controllers\Admin\Auth',
        //],
    ]
],

'exclude-routes'  => [
    'panels' => [
        'user' => [
            // sample
            'register.user',
            'employee.profile',
            ....
            ....
        ],
        // 'admin' => [
        //   route.name,
        //],
    ]
],

'cache-permissions' => true,

/**
 * Parmissions can be organised by section (ex: adminland, settings, employee managment etc)
 * 
 * sample format: key as section name, value as generated permissions-title
 * [
 *   'adminland' => [
 *       'employee-permissions',
 *       'bonus-permissions'
 *   ],
 *   'settings' => [
 *       'office-permissions',
 *       'designation-permissions',
 *       'email-settings-permissions',
 *       'rules-permissions'
 *   ],
 *  ]
 */
'permissions-section' => [
    'panels' => [
        'user' => [
            // sample
            'adminland' => [
                'users-permissions', // all the user permissions
                'roles-permissions' // all the role permissions
            ],
            'settings' => [
                'email-settings-permissions', // all the permissions of  email settings
                DepartmentController::class, // all the permissions of department
                DesignationController::class, // all the permissions of designation
                OrganisationController::class // all the permissions of organisation
            ],
            ......,
            ......, 
        ],
        // 'admin' => [
        // 
        //],
    ]
]

use RadiateCode\PermissionNameGenerator\Permissions;

$permissions = Permissions::make()->fromResources([
    'users',
    'posts',
])->get()

// output
[
    'users-permission' => [
        [
            'name' => 'create-users',
            'text' => 'Create Users'
        ],
        [
            'name' => 'edit-users',
            'text' => 'Edit Users'
        ],
        [
            'name' => 'show-users',
            'text' => 'Show Users'
        ],
        [
            'name' => 'delete-users',
            'text' => 'Delete Users'
        ],
        [
            'name' => 'view-users',
            'text' => 'View Users'
        ],
    ],
    'posts-permission' => [
        [
            'name' => 'create-posts',
            'text' => 'Create Posts'
        ],
        [
            'name' => 'edit-posts',
            'text' => 'Edit Posts'
        ],
        [
            'name' => 'show-posts',
            'text' => 'Show Posts'
        ],
        [
            'name' => 'delete-posts',
            'text' => 'Delete Posts'
        ],
        [
            'name' => 'view-posts',
            'text' => 'View Posts'
        ],
    ]
]

>  /**
>  * These actions used to generate permissions on given resources
>  * 
>  * [Ex: If resource is posts, then permission will be ('create-posts','edit-posts','view-posts') etc]
>  */
> 'resource-actions' => [
>    'create',
>    'edit',
>    'show',
>    'delete',
>    'view',
>]

**we can also add resource wise extra actions, which will generate extra permission names.**


use RadiateCode\PermissionNameGenerator\Permissions;
use RadiateCode\PermissionNameGenerator\Facades\PermissionsView;
use App\Models\Role;

class RoleController extends Controller
{
    public function permissionsShow($id)
    {
        $role = Role::query()->findOrFail($id);

        $permissions = Permissions::make()->fromResources([
                'users',
                'posts',
                'comments'
            ])->get();

        return PermissionsView::make('app.role.permissions')
            ->withPermissions($permissions)
            ->markRolePermissions(
                $role->role_name,
                json_decode($role->role_permissions), // assume role permissions stored as json encoded
                route('create-role-permission', $role->id) // permission save url for a role
            )->render();
    }
}