### 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"
}
]
```
```