### Example Request for All Roles Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Example cURL request to fetch all roles from the API. ```bash curl -X GET "http://yourapp.com/api/role-permissions/roles" \ -H "Authorization: Bearer {token}" \ -H "Accept: application/json" ``` -------------------------------- ### Get User Permissions Example Request (Bash) Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Example cURL request to fetch permissions for a user. ```bash curl -X GET "http://yourapp.com/api/role-permissions/user/123/permissions" \ -H "Authorization: Bearer {token}" ``` -------------------------------- ### Install Laravel Role Permission Manager Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/README.md Install the package using Composer. This command fetches and installs the latest version of the package. ```bash composer require creativecrafts/laravel-role-permission-manager ``` -------------------------------- ### Get User Roles Example Request (Bash) Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Example cURL request to fetch roles for a user, supporting both integer and string/UUID user IDs. ```bash curl -X GET "http://yourapp.com/api/role-permissions/user/123/roles" \ -H "Authorization: Bearer {token}" ``` ```bash # With user ID as string/UUID curl -X GET "http://yourapp.com/api/role-permissions/user/550e8400-e29b-41d4-a716-446655440000/roles" \ -H "Authorization: Bearer {token}" ``` -------------------------------- ### Curl Example for Getting Scoped Permissions Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Demonstrates how to request scoped permissions for a user via a curl command. ```bash # Get 'posts' scope permissions for user 123 curl -X GET "http://yourapp.com/api/role-permissions/user/123/permissions/posts" \ -H "Authorization: Bearer {token}" # Get 'users' scope permissions curl -X GET "http://yourapp.com/api/role-permissions/user/123/permissions/users" \ -H "Authorization: Bearer {token}" ``` -------------------------------- ### Install Laravel Role Permission Manager Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/README.md Install the package via Composer and publish its migrations and configuration files. Finally, run the migrations to set up the necessary database tables. ```bash composer require creativecrafts/laravel-role-permission-manager php artisan vendor:publish --tag="role-permission-manager-migrations" php artisan vendor:publish --tag="role-permission-manager-config" php artisan migrate ``` -------------------------------- ### Example Requests for Permissions Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Example cURL requests to fetch all permissions or permissions filtered by a specific scope. ```bash # Get all permissions curl -X GET "http://yourapp.com/api/role-permissions/permissions" \ -H "Authorization: Bearer {token}" # Get permissions for specific scope curl -X GET "http://yourapp.com/api/role-permissions/permissions?scope=posts" \ -H "Authorization: Bearer {token}" ``` -------------------------------- ### Example Frontend Usage for All Roles Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Example TypeScript function to fetch all roles using the Fetch API. ```typescript const getRoles = async () => { const response = await fetch('/api/role-permissions/roles', { headers: { 'Accept': 'application/json', } }) const roles = await response.json() return roles } ``` -------------------------------- ### Example Frontend Usage for Permissions Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Example TypeScript function to fetch permissions, with an optional scope parameter. ```typescript const getPermissions = async (scope?: string) => { const params = new URLSearchParams() if (scope) params.append('scope', scope) const response = await fetch( `/api/role-permissions/permissions?${params.toString()}`, { headers: { 'Accept': 'application/json', } } ) return await response.json() } ``` -------------------------------- ### Get User Permissions Example Frontend Usage (TypeScript) Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Example TypeScript function to fetch user permissions from the API. Handles potential 'User not found' errors. ```typescript const getUserPermissions = async (userId: number | string) => { const response = await fetch( `/api/role-permissions/user/${userId}/permissions`, { headers: { 'Accept': 'application/json', } } ) if (!response.ok) { throw new Error(`User not found`) } return await response.json() } ``` -------------------------------- ### Development Configuration Example Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/configuration.md Configuration settings optimized for development environments. Caching is disabled, and permissions are auto-created. ```php return [ 'user_model' => 'App\Models\User', 'cache_expiration_time' => 5, // Short cache 'auto_create_permissions' => true, // Auto-create during dev 'enable_wildcard_permission' => true, 'case_sensitive_permissions' => false, 'use_cache' => false, // No caching in dev 'register_blade_directives' => true, ]; ``` -------------------------------- ### TypeScript Example for Fetching Scoped Permissions Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Provides an example of how to fetch scoped permissions from the API using TypeScript and the Fetch API. ```typescript const getScopedPermissions = async (userId: number | string, scope: string) => { const response = await fetch( `/api/role-permissions/user/${userId}/permissions/${encodeURIComponent(scope)}`, { headers: { 'Accept': 'application/json', } } ) if (!response.ok) { throw new Error(`User not found`) } return await response.json() } ``` -------------------------------- ### Get User Roles Example Frontend Usage (TypeScript) Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Example TypeScript function to fetch user roles from the API. Handles potential 'User not found' errors. ```typescript const getUserRoles = async (userId: number | string) => { const response = await fetch(`/api/role-permissions/user/${userId}/roles`, { headers: { 'Accept': 'application/json', } }) if (!response.ok) { throw new Error(`User not found`) } return await response.json() } ``` -------------------------------- ### Manage Role Hierarchy Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/models.md This example shows how to create roles, establish parent-child relationships, and retrieve parent, children, or all descendant roles. ```php use CreativeCrafts\LaravelRolePermissionManager\Models\Role; // Create parent role $admin = Role::create([ 'name' => 'Admin', 'slug' => 'admin', 'description' => 'System administrator' ]); // Create child role $editor = Role::create([ 'name' => 'Editor', 'slug' => 'editor', 'description' => 'Content editor', 'parent_id' => $admin->id ]); // Get parent echo $editor->parent->name; // "Admin" // Get children foreach ($admin->children as $child) { echo $child->name; // "Editor", etc. } // Get all descendants foreach ($admin->getAllChildren() as $descendant) { echo $descendant->name; } ``` -------------------------------- ### Example Request Handling Scenarios Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/middleware.md Illustrates how the RoleMiddleware handles different request scenarios based on user roles and specified middleware requirements. ```text // User has 'admin' role GET /admin -> Allowed, passes to next middleware // User lacks all specified roles GET /admin -> Denied, returns 403 with "Unauthorized action." // User has 'editor' role, middleware checks for 'admin' or 'moderator' GET /dashboard -> Denied, returns 403 // JSON API request without required role GET /api/admin (user is 'editor') -> Returns JSON: {"message": "Unauthorized action."} (HTTP 403) ``` -------------------------------- ### Multi-Tenant Configuration Example Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/configuration.md Configuration tailored for multi-tenant applications, specifying custom table names for roles and permissions. ```php return [ 'user_model' => 'App\Models\User', 'roles_table' => 'tenant_roles', 'permissions_table' => 'tenant_permissions', 'role_permission_table' => 'tenant_role_has_permissions', 'cache_store' => 'redis', 'cache_expiration_time' => 60, 'use_cache' => true, ]; ``` -------------------------------- ### Production Configuration Example Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/configuration.md Configuration settings for production environments. Caching is enabled with a longer expiration time, and permissions are managed explicitly. ```php return [ 'user_model' => 'App\Models\User', 'cache_expiration_time' => 120, // Long cache 'auto_create_permissions' => false, // Explicit permissions only 'enable_wildcard_permission' => true, 'case_sensitive_permissions' => false, 'use_cache' => true, // Enable caching 'cache_store' => 'redis', // Use Redis 'register_blade_directives' => false, 'use_package_routes' => false, // Custom routes ]; ``` -------------------------------- ### GET /roles Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Retrieve all roles in the system. ```APIDOC ## GET /roles ### Description Retrieve all roles in the system. ### Method GET ### Endpoint {prefix}/roles ### Response #### Success Response (200 OK) - **Array of Role objects** ### Response Example ```json [ { "id": 1, "name": "Admin", "slug": "admin", "description": "System administrator", "parent_id": null, "created_at": "2024-01-15T10:30:00Z", "updated_at": "2024-01-15T10:30:00Z" } ] ``` ``` -------------------------------- ### Enable Blade Directives and Example Usage Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/configuration.md Set 'register_blade_directives' to true to enable custom Blade directives. Examples show how to use @hasRole and @hasPermission in Blade templates. ```php 'register_blade_directives' => true, // In Blade template: @hasRole('admin')

Admin panel

@endhasRole @hasPermission('edit-posts') @endhasPermission ``` -------------------------------- ### Facade Usage: Assign and Manage Permissions Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/README.md Examples of giving a permission to a role, granting/revoking permissions for a role and its sub-roles, and checking if a user has a specific permission. ```php LaravelRolePermissionManager::givePermissionToRole($role, $permission); // Grant permission to role and its sub-roles LaravelRolePermissionManager::grantPermissionToRoleAndSubRoles($role, 'edit-posts'); // Revoke permission from role and its sub-roles LaravelRolePermissionManager::revokePermissionFromRoleAndSubRoles($role, 'edit-posts'); // Check if user has permission $hasPermission = LaravelRolePermissionManager::hasPermissionTo($user, 'edit-posts'); ``` -------------------------------- ### Manage Roles Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/README.md Create roles with optional parent roles, retrieve all roles, or get sub-roles. ```php // Create role $role = $manager->createRole('Editor', 'editor', 'Content editor'); // Create with parent $role = $manager->createRole('Manager', 'manager', null, $parentRole); // Get all roles $roles = $manager->getAllRoles(); // Get sub-roles $children = $manager->getSubRoles($parentRole); ``` -------------------------------- ### Get All Roles Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/types.md Retrieves all role instances. Returns a Collection of Role objects. ```php // Collection $roles = $manager->getAllRoles(); ``` -------------------------------- ### Get Permissions Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Retrieves a list of all available permissions. ```APIDOC ## GET /permissions ### Description Retrieves a list of all available permissions. ### Method GET ### Endpoint /permissions ### Parameters #### Query Parameters None ### Request Example None ### Response #### Success Response (200) - **permissions** (array) - A list of permission objects. #### Response Example ```json { "permissions": [ { "id": 1, "name": "create-users", "guard_name": "web" } ] } ``` ``` -------------------------------- ### Get All Permissions Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/types.md Retrieves all permission instances. Returns a Collection of Permission objects. ```php // Collection $permissions = $manager->getAllPermissions(); ``` -------------------------------- ### Get All Roles Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/laravel-role-permission-manager.md Retrieves all roles from the system. Results are cached based on the configured cache expiration time. ```php public function getAllRoles(): Collection ``` ```php $allRoles = LaravelRolePermissionManager::getAllRoles(); foreach ($allRoles as $role) { echo $role->name; } ``` -------------------------------- ### Get Permissions by Role Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/models.md Retrieve all permissions assigned to a specific role. Requires the Role model to be found by name. ```php public function permissions(): BelongsToMany ``` ```php $role = Role::findByName('editor'); $permissions = $role->permissions; foreach ($permissions as $permission) { echo $permission->slug; } ``` -------------------------------- ### Get All Permissions by Scope Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/laravel-role-permission-manager.md Fetches all permissions associated with a specific scope. If no scope is provided, all permissions across all scopes are returned. Results are cached. ```php // Get all permissions with 'posts' scope $postPermissions = LaravelRolePermissionManager::getAllPermissionsForScope('posts'); // Get all permissions across all scopes $allPermissions = LaravelRolePermissionManager::getAllPermissionsForScope(); ``` -------------------------------- ### Get All Permissions for a Role Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/models.md Fetches all permissions directly assigned to a role, as well as those inherited from its parent roles. This provides a consolidated list of all accessible permissions. ```php public function getAllPermissions(): Collection ``` ```php $childRole = Role::findByName('content-manager'); // Includes permissions directly assigned plus those inherited from parent $permissions = $childRole->getAllPermissions(); ``` -------------------------------- ### Publish and Run Migrations Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/README.md Publish the package's migration files and then run the migrations to create the necessary database tables for roles and permissions. ```bash php artisan vendor:publish --tag="role-permission-manager-migrations" php artisan migrate ``` -------------------------------- ### Get User Roles (PHP) Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Retrieves all roles assigned to a specific user. Expects a JSON response of Role objects. Throws ModelNotFoundException if the user does not exist. ```php public function getUserRoles(int|string $userId): JsonResponse ``` -------------------------------- ### GET /user/{userId}/permissions Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Get all permissions for a specific user. ```APIDOC ## GET /user/{userId}/permissions ### Description Get all permissions for a specific user. ### Method GET ### Endpoint {prefix}/user/{userId}/permissions ### Parameters #### Path Parameters - **userId** (string) - Required - The ID of the user ### Response #### Success Response (200 OK) - **Array of Permission objects** ``` -------------------------------- ### GET /user/{userId}/roles Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Get roles for a specific user. ```APIDOC ## GET /user/{userId}/roles ### Description Get roles for a specific user. ### Method GET ### Endpoint {prefix}/user/{userId}/roles ### Parameters #### Path Parameters - **userId** (string) - Required - The ID of the user ### Response #### Success Response (200 OK) - **Array of Role objects** ``` -------------------------------- ### Get User Permissions (PHP) Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Retrieves all permissions for a specific user, including direct and role-based permissions. Expects a JSON response of Permission objects. Throws ModelNotFoundException if the user does not exist. ```php public function getUserPermissions( int|string $userId, Request $request, LaravelRolePermissionManager $manager ): JsonResponse ``` -------------------------------- ### Preventing InvalidPermissionArgumentException Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/errors.md Shows the correct ways to use the givePermissionTo method by passing either a Permission object or a permission string. Includes an example of type checking before calling the method. ```php use CreativeCrafts\LaravelRolePermissionManager\Models\Role; use CreativeCrafts\LaravelRolePermissionManager\Models\Permission; $role = Role::first(); // Correct: Using Permission object $permission = Permission::first(); $role->givePermissionTo($permission); // OK // Correct: Using permission string $role->givePermissionTo('edit-posts'); // OK // Type checking if (is_string($permission) || $permission instanceof Permission) { $role->givePermissionTo($permission); } ``` -------------------------------- ### Publish Configuration File Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/configuration.md Use this command to publish the configuration file to your application's config directory. ```bash php artisan vendor:publish --tag="role-permission-manager-config" ``` -------------------------------- ### GET /user/{userId}/permissions/{scope} Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Get scoped permissions for a specific user. ```APIDOC ## GET /user/{userId}/permissions/{scope} ### Description Get scoped permissions for a specific user. ### Method GET ### Endpoint {prefix}/user/{userId}/permissions/{scope} ### Parameters #### Path Parameters - **userId** (string) - Required - The ID of the user - **scope** (string) - Required - The scope of permissions to retrieve ### Response #### Success Response (200 OK) - **Array of Permission objects** ``` -------------------------------- ### Facade Usage: Manage Role Hierarchies Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/README.md Illustrates how to retrieve sub-roles of a given role and how to apply permission changes to a role and all its associated sub-roles. ```php // Get all sub-roles of a given role $parentRole = Role::findByName('manager'); $subRoles = LaravelRolePermissionManager::getSubRoles($parentRole); // Grant a permission to a role and all its sub-roles $role = Role::findByName('manager'); LaravelRolePermissionManager::grantPermissionToRoleAndSubRoles($role, 'edit_posts'); // Revoke a permission from a role and all its sub-roles LaravelRolePermissionManager::revokePermissionFromRoleAndSubRoles($role, 'delete_users'); ``` -------------------------------- ### Get All Child Roles Recursively Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/models.md Retrieves all descendant roles, including children and their children, for a given parent role. Use this to get a complete hierarchy under a specific role. ```php public function getAllChildren(): Collection ``` ```php $parentRole = Role::findByName('admin'); $allDescendants = $parentRole->getAllChildren(); foreach ($allDescendants as $role) { echo $role->name; // manager, content-manager, etc. } ``` -------------------------------- ### Create Role using Facade Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/README.md Use the facade to conveniently create a new role with a name and slug. ```php use CreativeCrafts\LaravelRolePermissionManager\Facades\LaravelRolePermissionManager; LaravelRolePermissionManager::createRole('Admin', 'admin'); ``` -------------------------------- ### Run Tests Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/README.md Execute the test suite for the package using Composer. ```bash composer test ``` -------------------------------- ### getUserRoles Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/trait-has-roles-and-permissions.md Get all roles assigned to a user. ```APIDOC ## getUserRoles ### Description Get all roles assigned to a user. ### Method ```php public function getUserRoles(mixed $user = null): Collection ``` ### Parameters #### Path Parameters - **user** (mixed) - Optional - Optional user (defaults to self) ### Response #### Success Response - **Collection** — Collection of Role models ### Request Example ```php $user = User::find(1); $roles = $user->getUserRoles(); // Or with another user $roles = $user->getUserRoles($anotherUser); ``` ``` -------------------------------- ### getUserRoleSlugs Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/trait-has-roles-and-permissions.md Get the slugs of all roles assigned to a user. ```APIDOC ## getUserRoleSlugs ### Description Get the slugs of all roles assigned to a user. ### Method ```php public function getUserRoleSlugs(mixed $user = null): Collection ``` ### Parameters #### Path Parameters - **user** (mixed) - Optional - Optional user (defaults to self) ### Response #### Success Response - **Collection** — Collection of role slug strings ### Request Example ```php $user = User::find(1); $slugs = $user->getUserRoleSlugs(); // ['admin', 'editor'] ``` ``` -------------------------------- ### getUserRoleNames Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/trait-has-roles-and-permissions.md Get the names of all roles assigned to a user. ```APIDOC ## getUserRoleNames ### Description Get the names of all roles assigned to a user. ### Method ```php public function getUserRoleNames(mixed $user = null): Collection ``` ### Parameters #### Path Parameters - **user** (mixed) - Optional - Optional user (defaults to self) ### Response #### Success Response - **Collection** — Collection of role name strings ### Request Example ```php $user = User::find(1); $roleNames = $user->getUserRoleNames(); // ['admin', 'editor'] ``` ``` -------------------------------- ### Facade Usage: Create Role and Permission Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/README.md Demonstrates how to create a new role and a new permission using the LaravelRolePermissionManager facade. ```php use CreativeCrafts\LaravelRolePermissionManager\Facades\LaravelRolePermissionManager; // Create a role $role = LaravelRolePermissionManager::createRole('Editor', 'editor'); // Create a permission $permission = LaravelRolePermissionManager::createPermission('Edit Posts', 'edit-posts'); ``` -------------------------------- ### Create Role Model and Check Permission Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/README.md This snippet demonstrates creating a role and checking if it has a specific permission. Ensure the Role model is imported. ```php use CreativeCrafts\LaravelRolePermissionManager\Models\Role; $role = Role::create([ 'name' => 'Editor', 'description' => 'Can edit and publish content' ]); if ($role->hasPermissionTo('edit-posts')) { // Allow editing posts } ``` -------------------------------- ### GET /permissions Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Retrieve permissions, optionally filtered by scope. ```APIDOC ## GET /permissions ### Description Retrieve permissions, optionally filtered by scope. ### Method GET ### Endpoint {prefix}/permissions ### Parameters #### Query Parameters - **scope** (string) - Optional - Optional scope to filter permissions ### Response #### Success Response (200 OK) - **Array of Permission objects** ### Response Example ```json [ { "id": 1, "name": "Edit Posts", "slug": "edit-posts", "description": "Allow user to edit posts", "scope": "posts", "created_at": "2024-01-15T10:30:00Z", "updated_at": "2024-01-15T10:30:00Z" } ] ``` ``` -------------------------------- ### Get User Permissions Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Retrieves all permissions assigned to a specific user. ```APIDOC ## GET /users/{userId}/permissions ### Description Retrieves all permissions assigned to a specific user. ### Method GET ### Endpoint /users/{userId}/permissions ### Parameters #### Path Parameters - **userId** (integer) - Required - The ID of the user. ### Request Example None ### Response #### Success Response (200) - **permissions** (array) - A list of permission objects assigned to the user. #### Response Example ```json { "permissions": [ { "id": 2, "name": "edit-articles", "guard_name": "web" } ] } ``` ``` -------------------------------- ### Applying Role and Permission Middleware (AND Logic) Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/middleware.md Use this to require both a specific role and a specific permission for a route. Middleware is evaluated left-to-right. ```php Route::post('/admin/users', [UserController::class, 'store']) ->middleware('role:admin') // Must have admin role ->middleware('permission:create-users'); // AND create-users permission ``` -------------------------------- ### Get User Roles Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Retrieves all roles assigned to a specific user. ```APIDOC ## GET /users/{userId}/roles ### Description Retrieves all roles assigned to a specific user. ### Method GET ### Endpoint /users/{userId}/roles ### Parameters #### Path Parameters - **userId** (integer) - Required - The ID of the user. ### Request Example None ### Response #### Success Response (200) - **roles** (array) - A list of role objects assigned to the user. #### Response Example ```json { "roles": [ { "id": 1, "name": "editor", "guard_name": "web" } ] } ``` ``` -------------------------------- ### Apply Role Middleware to Routes Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/middleware.md Demonstrates how to apply the 'role' middleware to single routes, route groups, or resources, specifying required roles. ```php Route::get('/admin', [AdminController::class, 'dashboard'])->middleware('role:admin'); ``` ```php Route::resource('settings', SettingsController::class)->middleware('role:admin,superadmin'); ``` ```php Route::middleware('role:editor') ->group(function () { Route::resource('posts', PostController::class); Route::resource('media', MediaController::class); }); ``` -------------------------------- ### Configure Package Routes Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Set 'use_package_routes' to true to enable default routes, or false to disable them. Configure the 'route_prefix' and 'route_middleware' as needed. ```php 'use_package_routes' => true, // Enable (default) or false to disable 'route_prefix' => 'api/role-permissions', // Base prefix for all routes 'route_middleware' => ['web', 'auth'], // Middleware applied to routes ``` -------------------------------- ### Instantiate Permission Model Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/models.md Create a new Permission instance. The constructor automatically sets the table name from configuration and generates a slug from the name if not provided. ```php public function __construct(array $attributes = []) ``` ```php $permission = new Permission([ 'name' => 'Edit Posts', 'description' => 'Allow user to edit posts' ]); // Slug is automatically set to 'edit-posts' ``` -------------------------------- ### Get User Scoped Permissions Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Fetches permissions for a specific user within a given scope. ```APIDOC ## GET /api/role-permissions/user/{userId}/permissions/{scope} ### Description Retrieves permissions for a specific user within a given scope. ### Method GET ### Endpoint /api/role-permissions/user/{userId}/permissions/{scope} ### Path Parameters - **userId** (number | string) - Required - The ID of the user. - **scope** (string) - Required - The scope for which to retrieve permissions. ### Response #### Success Response (200) - permissions (array) - A list of permission objects for the specified user and scope. ``` -------------------------------- ### Assign Permissions to Roles Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/models.md Demonstrates how to retrieve a role's permissions and manage assignments using relationship methods like attach, detach, and sync. ```php $role = Role::findByName('editor'); // Get assigned permissions $permissions = $role->permissions; // Add permission using the relationship $role->permissions()->attach($permission->id); // Remove permission using the relationship $role->permissions()->detach($permission->id); // Sync multiple permissions $role->permissions()->sync([1, 2, 3]); ``` -------------------------------- ### Get Scoped User Permissions Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Retrieves permissions for a specific user within a given scope. ```APIDOC ## GET /users/{userId}/permissions/{scope} ### Description Retrieves permissions for a specific user within a given scope. ### Method GET ### Endpoint /users/{userId}/permissions/{scope} ### Parameters #### Path Parameters - **userId** (integer) - Required - The ID of the user. - **scope** (string) - Required - The scope for which to retrieve permissions. ### Request Example None ### Response #### Success Response (200) - **permissions** (array) - A list of permission objects for the specified user and scope. #### Response Example ```json { "permissions": [ { "id": 3, "name": "publish-articles", "guard_name": "web" } ] } ``` ``` -------------------------------- ### Configure Route Middleware Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/configuration.md Specify the middleware to be applied to all package routes. Defaults to ['web', 'auth']. ```php 'route_middleware' => ['web', 'auth'], ``` ```php 'route_middleware' => ['api', 'auth:sanctum'], 'route_middleware' => ['web', 'auth', 'verified'], ``` -------------------------------- ### Get Sub Roles Recursively Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/laravel-role-permission-manager.md Retrieves all sub-roles of a given role, including their descendants, in a flattened collection. ```php public function getSubRoles(Role $role): Collection ``` ```php $parentRole = Role::findByName('admin'); $subRoles = LaravelRolePermissionManager::getSubRoles($parentRole); foreach ($subRoles as $subRole) { echo $subRole->name; } ``` -------------------------------- ### Customize Route Registration Configuration Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/README.md Configure route registration by setting 'use_package_routes' to false and optionally specifying a 'route_prefix' and 'route_middleware'. ```php 'use_package_routes' => false, 'route_prefix' => 'api', 'route_middleware' => ['api'], ``` -------------------------------- ### Project File Structure Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/README.md Overview of the directory structure for the Laravel Role Permission Manager package, detailing the location of core components like Actions, Models, Middleware, and Traits. ```tree src/ ├── Actions/ # Domain action classes │ ├── CreateNewPermission.php │ └── CreateNewRole.php ├── Commands/ # Artisan commands ├── Contracts/ # Interfaces │ ├── AuthenticatableWithRolesAndPermissions.php │ ├── LaravelRolePermissionManagerContract.php │ └── DataTransferObjectContract.php ├── DataTransferObjects/ # DTO classes │ ├── PermissionData.php │ └── RoleData.php ├── Exceptions/ # Custom exceptions │ ├── InvalidParentException.php │ ├── InvalidPermissionArgumentException.php │ ├── InvalidScopeException.php │ ├── UnableToCreatePermissionException.php │ └── UnableToCreateRoleException.php ├── Facades/ # Service facades │ └── LaravelRolePermissionManager.php ├── Helpers/ # Helper classes ├── Http/ # HTTP layer │ └── Controllers/ │ └── RolePermissionController.php ├── Middleware/ # HTTP middleware │ ├── HandleInertiaRequests.php │ ├── PermissionMiddleware.php │ └── RoleMiddleware.php ├── Models/ # Eloquent models │ ├── Permission.php │ └── Role.php ├── Policies/ # Authorization policies ├── Providers/ # Service providers ├── Traits/ # Mixins │ └── HasRolesAndPermissions.php ├── LaravelRolePermissionManager.php # Core service └── LaravelRolePermissionManagerServiceProvider.php ``` -------------------------------- ### Get User Role Slugs Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/types.md Retrieves the slugs of roles assigned to a user. Returns a Collection of strings. ```php // Collection $roleSlugs = $manager->getRoleSlugs($user); ``` -------------------------------- ### Configure Cache Store Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/configuration.md Specify the cache store to use for roles and permissions. Options include 'database', 'redis', 'memcached', 'file', and 'array'. ```php 'cache_store' => env('CACHE_STORE', 'database'), ``` ```php 'cache_store' => 'redis', ``` ```php 'cache_store' => 'memcached', ``` ```php 'cache_store' => env('CACHE_STORE'), ``` -------------------------------- ### Get User Role Names Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/types.md Retrieves the names of roles assigned to a user. Returns a Collection of strings. ```php // Collection $roleNames = $manager->getRoleNames($user); ``` -------------------------------- ### Publish TypeScript Files Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/README.md Publish the TypeScript helper files for use in your application. This command makes the package's frontend assets available. ```bash php artisan vendor:publish --tag="laravel-role-permission-manager-typescript" ``` -------------------------------- ### Get All User Roles Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/laravel-role-permission-manager.md Retrieves a collection of all roles assigned to a given user. Cache is cleared in development environments. ```php $user = User::find(1); $roles = LaravelRolePermissionManager::getUserRoles($user); foreach ($roles as $role) { echo $role->name; } ``` -------------------------------- ### roles Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/trait-has-roles-and-permissions.md Get the roles associated with the model. This method returns a BelongsToMany relationship query builder for the role relationship. ```APIDOC ## roles ### Description Get the roles associated with the model. ### Method `GET` (Implicit) ### Endpoint N/A (Trait method) ### Returns `BelongsToMany` — Query builder for role relationship ### Throws `LogicException` — If trait is not used on Eloquent model ### Example ```php $user = User::find(1); $roles = $user->roles; foreach ($roles as $role) { echo $role->name; } // Or use as query builder $adminUsers = User::whereHas('roles', function ($query) { $query->where('slug', 'admin'); })->get(); ``` ``` -------------------------------- ### Create Permission Model Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/README.md Use this snippet to create a new permission instance. Ensure the necessary model is imported. ```php use CreativeCrafts\LaravelRolePermissionManager\Models\Permission; $permission = Permission::create([ 'name' => 'Edit Posts', 'description' => 'Allow user to edit posts', 'scope' => 'blog' ]); ``` -------------------------------- ### Get Parent Role Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/models.md Retrieve the parent role of a given role. Checks if a parent exists before accessing its name. ```php public function parent(): BelongsTo ``` ```php $childRole = Role::findByName('content-manager'); if ($childRole->parent) { echo "Parent: " . $childRole->parent->name; } ``` -------------------------------- ### Publish Policies for Customization Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/README.md Publish the package's authorization policies to your application's 'app/Policies' directory for custom modification. ```bash php artisan vendor:publish --tag="laravel-role-permission-manager-policies" ``` -------------------------------- ### Apply Role Middleware in Controllers Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/middleware.md Shows how to protect controller actions using the 'role' middleware, either for all actions or specific ones. ```php namespace App\Http\Controllers; class AdminController extends Controller { public function __construct() { // Protect all actions with admin role $this->middleware('role:admin'); } } ``` ```php namespace App\Http\Controllers; class DashboardController extends Controller { public function __construct() { // Only admin or moderator can access index $this->middleware('role:admin,moderator')->only('index'); // Only admin can create/delete $this->middleware('role:admin')->only('create', 'store', 'destroy'); } } ``` -------------------------------- ### Get Users by Role Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/models.md Retrieve all users associated with a specific role. Requires the Role model to be found by name. ```php public function users(): BelongsToMany ``` ```php $role = Role::findByName('editor'); $users = $role->users; foreach ($users as $user) { echo $user->name; } ``` -------------------------------- ### Handling UnableToCreatePermissionException Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/errors.md Shows how to catch and handle the UnableToCreatePermissionException using a try-catch block, logging the error, and returning a JSON response with error details. ```php use CreativeCrafts\LaravelRolePermissionManager\Exceptions\UnableToCreatePermissionException; try { $manager->createPermission('New Perm', 'new-perm', 'Description'); } catch (UnableToCreatePermissionException $e) { Log::error('Permission creation failed: ' . $e->getMessage()); return response()->json([ 'error' => 'Failed to create permission', 'message' => $e->getMessage(), ], $e->getCode() ?: 500); } ``` -------------------------------- ### Get User Roles Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Retrieves all roles assigned to a specific user. It supports both integer and string (UUID) user IDs. ```APIDOC ## GET /api/role-permissions/user/{userId}/roles ### Description Retrieve all roles assigned to a specific user. ### Method GET ### Endpoint /api/role-permissions/user/{userId}/roles #### Path Parameters - **userId** (int|string) - Required - The ID of the user ### Response #### Success Response (200 OK) - Returns a JSON array of Role objects assigned to the user. ### Response Example ```json [ { "id": 1, "name": "Admin", "slug": "admin", "description": "System administrator", "parent_id": null, "created_at": "2024-01-15T10:30:00Z", "updated_at": "2024-01-15T10:30:00Z" } ] ``` ``` -------------------------------- ### permissions Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/trait-has-roles-and-permissions.md Get the direct permissions assigned to the model. This method returns a BelongsToMany relationship query builder for the permissions relationship. ```APIDOC ## permissions ### Description Get the direct permissions assigned to the model. ### Method `GET` (Implicit) ### Endpoint N/A (Trait method) ### Returns `BelongsToMany` — Query builder for permissions relationship ### Throws `LogicException` — If trait is not used on Eloquent model ### Example ```php $user = User::find(1); $directPermissions = $user->permissions; foreach ($directPermissions as $permission) { echo $permission->slug; } ``` ``` -------------------------------- ### Register User Model Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/README.md Register your application's User model with the package. This is essential for the package to correctly associate roles and permissions with your users. Add this to your `AppServiceProvider` or a custom service provider. ```php use CreativeCrafts\LaravelRolePermissionManager\LaravelRolePermissionManagerServiceProvider; public function boot() { LaravelRolePermissionManagerServiceProvider::registerUserModel(\\App\\Models\\User::class); } ``` -------------------------------- ### Apply Multiple Permissions (Any) to Route Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/middleware.md Protect a route by requiring any one of the specified permissions using the 'permission' middleware. ```php Route::delete('/posts/{post}', [PostController::class, 'destroy']) ->middleware('permission:delete-posts,admin-delete'); ``` -------------------------------- ### Get Child Roles Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/models.md Retrieve all direct child roles of a specific parent role. Iterates through the children to display their names. ```php public function children(): HasMany ``` ```php $parentRole = Role::findByName('manager'); $children = $parentRole->children; foreach ($children as $child) { echo $child->name; // content-manager, etc. } ``` -------------------------------- ### Get Roles for a Permission Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/models.md Retrieve all roles associated with a specific permission. This is useful for checking which roles have a particular permission assigned. ```php public function roles(): BelongsToMany ``` ```php $permission = Permission::find(1); $roles = $permission->roles; foreach ($roles as $role) { echo $role->name; } ``` -------------------------------- ### Vue Component Usage with Permission Helpers Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/README.md Demonstrates how to use Vue permission helper functions like 'can' and 'hasAnyPermission' within a Vue component's template and script. ```text ``` -------------------------------- ### getAllPermissions Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/laravel-role-permission-manager.md Retrieves all permissions defined in the system. ```APIDOC ## getAllPermissions ### Description Retrieve all permissions in the system. ### Method ```php public function getAllPermissions(): Collection ``` ### Returns `Collection` — Collection of all Permission models ### Example ```php $allPermissions = LaravelRolePermissionManager::getAllPermissions(); foreach ($allPermissions as $permission) { echo $permission->name . " (" . $permission->slug . ")"; } ``` ``` -------------------------------- ### Get All User Permissions Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/laravel-role-permission-manager.md Retrieves a collection of all unique permissions assigned to a user, including direct and role-based permissions. Results are cached. ```php $user = User::find(1); $permissions = LaravelRolePermissionManager::getAllPermissionsForUser($user); foreach ($permissions as $permission) { echo $permission->name . " (" . $permission->slug . ")"; } ``` -------------------------------- ### Create a New Permission Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/laravel-role-permission-manager.md Creates a new permission with an optional description and scope. Permissions define specific actions users can perform. Note that names and slugs are lowercased if case-sensitive permissions are disabled in configuration. ```php // Create basic permissions $permission = LaravelRolePermissionManager::createPermission( 'Edit Posts', 'edit-posts', 'Allow user to edit posts' ); // Create scoped permissions $postsPermission = LaravelRolePermissionManager::createPermission( 'Create Posts', 'create-posts', 'Allow user to create posts', 'posts' ); $usersPermission = LaravelRolePermissionManager::createPermission( 'Create Users', 'create-users', 'Allow user to create users', 'users' ); ``` -------------------------------- ### Set User Model in Configuration Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/configuration.md Alternatively, the user model can be specified directly in the configuration file. ```php 'user_model' => \App\Models\User::class, ``` -------------------------------- ### getRoleNames Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/laravel-role-permission-manager.md Retrieves a collection of names for all roles assigned to a specific user. This provides a quick way to get just the names of the user's roles. ```APIDOC ## getRoleNames ### Description Get the names of all roles assigned to a user. This method returns a collection of strings, where each string is the name of a role assigned to the user. ### Method `getRoleNames(mixed $user): Collection` ### Parameters #### Path Parameters - **user** (mixed) - Required - The user object for whom to retrieve role names. ### Returns - `Collection` - A collection of role name strings. ### Example ```php $user = User::find(1); $roleNames = LaravelRolePermissionManager::getRoleNames($user); // ['admin', 'editor'] ``` ``` -------------------------------- ### Get All Permissions Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/trait-has-roles-and-permissions.md Retrieves all permissions associated with a model, including direct permissions and those inherited from roles. An optional scope can be provided to filter permissions. ```php public function getAllPermissions(?string $scope = null): Collection ``` ```php $user = User::find(1); // Get all permissions $allPermissions = $user->getAllPermissions(); // Get permissions for specific scope $postPermissions = $user->getAllPermissions('posts'); foreach ($postPermissions as $permission) { echo $permission->slug; } ``` -------------------------------- ### Configure Package Route Registration Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/configuration.md Determine whether the package should automatically register its API routes for roles, permissions, and user data. Defaults to true. ```php 'use_package_routes' => true, ``` ```php 'use_package_routes' => false, ``` -------------------------------- ### Get Permissions (Optional Scope) Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Retrieves permissions, optionally filtered by a specific scope. Use the 'scope' query parameter to narrow down the results. ```php public function getPermissions(Request $request, LaravelRolePermissionManager $manager): JsonResponse ``` -------------------------------- ### Configure Default Guard Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/configuration.md Define the default authentication guard to be used for role and permission checks. Defaults to 'web'. ```php 'default_guard' => 'web', ``` ```php 'default_guard' => 'api', 'default_guard' => 'sanctum', ``` -------------------------------- ### Create a New Role Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/laravel-role-permission-manager.md Creates a new role with an optional description and parent role for hierarchical structures. Use this to define distinct roles within your application. ```php use CreativeCrafts\LaravelRolePermissionManager\Facades\LaravelRolePermissionManager; // Create a basic role $role = LaravelRolePermissionManager::createRole('Editor', 'editor', 'Can edit content'); // Create a role with a parent role $parentRole = LaravelRolePermissionManager::createRole('Admin', 'admin'); $subRole = LaravelRolePermissionManager::createRole('Content Manager', 'content-manager', null, $parentRole); ``` -------------------------------- ### Register User Model in Service Provider Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/configuration.md Register the custom user model within the service provider's boot method. This ensures the package uses your specified user model. ```php // app/Providers/AppServiceProvider.php use CreativeCrafts\LaravelRolePermissionManager\LaravelRolePermissionManagerServiceProvider; public function boot() { LaravelRolePermissionManagerServiceProvider::registerUserModel("App\Models\User"::class); } ``` -------------------------------- ### Get User Roles Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/trait-has-roles-and-permissions.md Retrieves all roles assigned to a user. If no user is provided, it defaults to the current model instance. Returns a collection of Role models. ```php public function getUserRoles(mixed $user = null): Collection ``` ```php $user = User::find(1); $roles = $user->getUserRoles(); // Or with another user $roles = $user->getUserRoles($anotherUser); ``` -------------------------------- ### Get User Permissions Source: https://github.com/creativecrafts/laravel-role-permission-manager/blob/main/_autodocs/api-reference/http-controller.md Retrieves all permissions for a specific user, including both direct and role-based permissions. Supports integer or string (UUID) user IDs. ```APIDOC ## GET /api/role-permissions/user/{userId}/permissions ### Description Retrieve all permissions for a specific user (direct and role-based). ### Method GET ### Endpoint /api/role-permissions/user/{userId}/permissions #### Path Parameters - **userId** (int|string) - Required - The ID of the user ### Response #### Success Response (200 OK) - Returns a JSON array of Permission objects. ### Response Example ```json [ { "id": 1, "name": "Edit Posts", "slug": "edit-posts", "description": "Allow user to edit posts", "scope": "posts", "created_at": "2024-01-15T10:30:00Z", "updated_at": "2024-01-15T10:30:00Z" }, { "id": 2, "name": "Delete Posts", "slug": "delete-posts", "description": "Allow user to delete posts", "scope": "posts", "created_at": "2024-01-15T10:30:00Z", "updated_at": "2024-01-15T10:30:00Z" } ] ``` ```