1. Go to this page and download the library: Download damianulan/laravel-sentinel library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
damianulan / laravel-sentinel example snippets
namespace App\Models\Core;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Sentinel\Traits\HasRolesAndPermissions;
class User extends Authenticatable
{
use HasRolesAndPermissions;
}
namespace App\Warden;
use Sentinel\Config\Warden\RoleWarden;
final class RolesLib extends RoleWarden
{
public const ROOT = 'root';
public const ADMIN = 'admin';
public const PROJECT_MANAGER = 'project-manager';
public const MEMBER = 'member';
public static function assignable(): array
{
return [
self::ADMIN,
self::PROJECT_MANAGER,
self::MEMBER,
];
}
public static function admins(): array
{
return [
self::ROOT,
self::ADMIN,
];
}
public static function labels(): array
{
return [
self::ROOT => 'Root',
self::ADMIN => 'Administrator',
self::PROJECT_MANAGER => 'Project manager',
self::MEMBER => 'Member',
];
}
}
namespace App\Warden;
use Sentinel\Config\Warden\PermissionWarden;
final class PermissionsLib extends PermissionWarden
{
public const PROJECT_VIEW = 'project-view';
public const PROJECT_UPDATE = 'project-update';
public const PROJECT_DELETE = 'project-delete';
public const USER_MANAGE = 'user-manage';
public static function assignable(): array
{
return [
self::PROJECT_VIEW => ['*'],
self::PROJECT_UPDATE => [RolesLib::PROJECT_MANAGER, RolesLib::ADMIN],
self::PROJECT_DELETE => ['admins'],
];
}
public static function nonassignable(): array
{
return [
self::USER_MANAGE => ['admins'],
];
}
public static function labels(): array
{
return [
self::PROJECT_VIEW => 'View projects',
self::PROJECT_UPDATE => 'Update projects',
self::PROJECT_DELETE => 'Delete projects',
self::USER_MANAGE => 'Manage users',
];
}
}
use App\Models\Project;
use App\Warden\RolesLib;
$user->assignRoleSlug(RolesLib::PROJECT_MANAGER, $project);
$user->assignRoleSlug(RolesLib::ADMIN); // assigned in default context
$user->roles(); // all assigned roles relation
$user->roles($project); // roles in project context + default system context
$user->roleAssignments(); // raw DB query for has_roles pivot rows
$user->getRoles(); // collection of role slugs
$user->getRolesNames(); // translated or labeled role names
$user->hasRole(RolesLib::ADMIN);
$user->hasRoles([RolesLib::ADMIN, RolesLib::MEMBER]);
$user->hasAnyRoles([RolesLib::ADMIN, RolesLib::PROJECT_MANAGER]);
use Sentinel\Testing\Concerns\InteractsWithRoles;
uses(InteractsWithRoles::class);
it('assigns the admin role', function () use ($user) {
$this->assertHasRole('admin', $user);
});
use App\Models\Project;
use App\Warden\PermissionsLib;
use App\Warden\RolesLib;
$project = Project::findOrFail(1);
$user->assignRoleSlug(RolesLib::ADMIN);
$user->assignRoleSlug(RolesLib::PROJECT_MANAGER, $project);
$user->hasPermissionTo(PermissionsLib::PROJECT_DELETE); // true if granted through admin role
$user->hasPermissionTo(PermissionsLib::PROJECT_UPDATE, $project); // true
$otherProject = Project::findOrFail(2);
$user->hasPermissionTo(PermissionsLib::PROJECT_UPDATE, $otherProject); // false unless another role grants it