*/ 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); } }