58 خطوط
1.9 KiB
PHP
58 خطوط
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Modules\Identity\Application;
|
|
|
|
use App\Models\User;
|
|
use App\Modules\Identity\Domain\Enums\Permission;
|
|
use App\Modules\Identity\Domain\Enums\UserRole;
|
|
|
|
final class RolePermissions
|
|
{
|
|
/** @return list<Permission> */
|
|
public function for(UserRole $role): array
|
|
{
|
|
return match ($role) {
|
|
UserRole::SuperAdmin => [
|
|
Permission::PlatformManageOrganizations,
|
|
Permission::PlatformViewOperations,
|
|
],
|
|
UserRole::CourseDesigner => [
|
|
Permission::UsersView,
|
|
Permission::UsersInvite,
|
|
Permission::UsersManage,
|
|
Permission::TeamsView,
|
|
Permission::TeamsManage,
|
|
Permission::SubscriptionView,
|
|
Permission::TaxonomyView,
|
|
Permission::TaxonomyManage,
|
|
Permission::CoursesAuthor,
|
|
Permission::CoursesReview,
|
|
Permission::CoursesPublish,
|
|
Permission::AssignmentsManage,
|
|
Permission::OrganizationAnalyticsView,
|
|
],
|
|
UserRole::Manager => [
|
|
Permission::UsersView,
|
|
Permission::TeamsView,
|
|
Permission::TaxonomyView,
|
|
Permission::TeamAnalyticsView,
|
|
Permission::CoursesReview,
|
|
Permission::PersonalLearningView,
|
|
Permission::ManagerAssignmentsManage,
|
|
Permission::ManagerDeadlinesManage,
|
|
Permission::ManagerRemindersSend,
|
|
],
|
|
UserRole::Learner => [
|
|
Permission::PersonalLearningView,
|
|
],
|
|
};
|
|
}
|
|
|
|
public function allows(User|UserRole $subject, Permission $permission): bool
|
|
{
|
|
$role = $subject instanceof User ? $subject->role : $subject;
|
|
|
|
return in_array($permission, $this->for($role), true);
|
|
}
|
|
}
|