added team create permission
This commit is contained in:
@@ -14,6 +14,7 @@ enum Permission: string
|
||||
case ProjectRead = 'project:read';
|
||||
case ProjectWrite = 'project:write';
|
||||
case ProjectAdmin = 'project:admin';
|
||||
case TeamCreate = 'team:create';
|
||||
case TeamInvite = 'team:invite';
|
||||
case TeamManage = 'team:manage';
|
||||
case TeamAdmin = 'team:admin';
|
||||
@@ -26,6 +27,7 @@ enum Permission: string
|
||||
self::ProjectRead => 'Project read',
|
||||
self::ProjectWrite => 'Project write',
|
||||
self::ProjectAdmin => 'Project admin',
|
||||
self::TeamCreate => 'Team create',
|
||||
self::TeamInvite => 'Team invite',
|
||||
self::TeamManage => 'Team manage',
|
||||
self::TeamAdmin => 'Team admin',
|
||||
@@ -35,7 +37,7 @@ enum Permission: string
|
||||
public function scope(): PermissionScope
|
||||
{
|
||||
return match ($this) {
|
||||
self::GlobalAdmin, self::ProjectCreate => PermissionScope::Global,
|
||||
self::GlobalAdmin, self::ProjectCreate, self::TeamCreate => PermissionScope::Global,
|
||||
self::ProjectRead, self::ProjectWrite, self::ProjectAdmin => PermissionScope::Project,
|
||||
self::TeamInvite, self::TeamManage, self::TeamAdmin => PermissionScope::Team,
|
||||
};
|
||||
@@ -64,13 +66,8 @@ enum Permission: string
|
||||
return true;
|
||||
}
|
||||
|
||||
foreach ($this->impliedPermissions() as $impliedPermission) {
|
||||
if ($impliedPermission->includes($permission)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return array_any($this->impliedPermissions(), fn ($impliedPermission) => $impliedPermission->includes($permission));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function isAssignableTo(Model|string $assignee): bool
|
||||
@@ -118,6 +115,7 @@ enum Permission: string
|
||||
{
|
||||
return [
|
||||
self::GlobalAdmin,
|
||||
self::TeamCreate,
|
||||
self::ProjectCreate,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ class TeamController extends Controller
|
||||
public function index(Request $request): Response
|
||||
{
|
||||
$user = $request->user();
|
||||
$canCreateTeams = $this->permissionService->allows($user, Permission::GlobalAdmin);
|
||||
$canCreateTeams = $this->permissionService->allows($user, Permission::TeamCreate);
|
||||
$manageableTeamIds = $this->permissionService->manageableTeamIds($user);
|
||||
|
||||
abort_unless($canCreateTeams || $manageableTeamIds !== [], 403);
|
||||
|
||||
@@ -48,7 +48,7 @@ class HandleInertiaRequests extends Middleware
|
||||
'name' => config('app.name'),
|
||||
'auth' => [
|
||||
'permissions' => [
|
||||
'canManageTeams' => $user !== null && $this->permissionService->canManageAnyTeam($user),
|
||||
'canManageTeams' => $user !== null && ($this->permissionService->canManageAnyTeam($user) || $this->permissionService->allows($user, Permission::TeamCreate)),
|
||||
'globalAdmin' => $user !== null && $this->permissionService->allows($user, Permission::GlobalAdmin),
|
||||
'projectCreate' => $user !== null && $this->permissionService->allows($user, Permission::ProjectCreate),
|
||||
],
|
||||
|
||||
@@ -13,7 +13,7 @@ class StoreTeamRequest extends FormRequest
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return $this->user()?->can('access-admin') ?? false;
|
||||
return $this->user()?->can('create-team') ?? false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -56,7 +56,9 @@ class AppServiceProvider extends ServiceProvider
|
||||
|
||||
Gate::define('access-admin', fn (User $user): bool => $permissionService->allows($user, Permission::GlobalAdmin));
|
||||
Gate::define('create-project', fn (User $user): bool => $permissionService->allows($user, Permission::ProjectCreate));
|
||||
Gate::define('create-team', fn (User $user): bool => $permissionService->allows($user, Permission::TeamCreate));
|
||||
Gate::define('manage-teams', fn (User $user): bool => $permissionService->canManageAnyTeam($user));
|
||||
Gate::define('view-teams', fn (User $user): bool => Gate::forUser($user)->any(['create-team', 'manage-teams']));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user