configurePermissions(); Jetstream::createTeamsUsing(CreateOrganization::class); Jetstream::updateTeamNamesUsing(UpdateOrganization::class); Jetstream::addTeamMembersUsing(AddOrganizationMember::class); Jetstream::inviteTeamMembersUsing(InviteOrganizationMember::class); Jetstream::removeTeamMembersUsing(RemoveOrganizationMember::class); Jetstream::deleteTeamsUsing(DeleteOrganization::class); Jetstream::deleteUsersUsing(DeleteUser::class); Jetstream::useTeamModel(Organization::class); Jetstream::useTeamInvitationModel(OrganizationInvitation::class); app()->singleton(UpdateTeamMemberRole::class, UpdateMemberRole::class); } /** * Configure the roles and permissions that are available within the application. */ protected function configurePermissions(): void { Jetstream::defaultApiTokenPermissions([]); Jetstream::role(Role::Owner->value, 'Owner', [ 'projects:view', 'projects:view:all', 'projects:create', 'projects:update', 'projects:delete', 'project-members:view', 'project-members:create', 'project-members:update', 'project-members:delete', 'tasks:view', 'tasks:create', 'tasks:update', 'tasks:delete', 'time-entries:view:all', 'time-entries:create:all', 'time-entries:update:all', 'time-entries:delete:all', 'time-entries:view:own', 'time-entries:create:own', 'time-entries:update:own', 'time-entries:delete:own', 'tags:view', 'tags:create', 'tags:update', 'tags:delete', 'clients:view', 'clients:create', 'clients:update', 'clients:delete', 'organizations:view', 'organizations:update', 'import', 'members:view', 'members:invite-placeholder', 'members:change-role', 'members:update', 'members:delete', ])->description('Owner users can perform any action.'); Jetstream::role(Role::Admin->value, 'Administrator', [ 'projects:view', 'projects:view:all', 'projects:create', 'projects:update', 'projects:delete', 'project-members:view', 'project-members:create', 'project-members:update', 'project-members:delete', 'tasks:view', 'tasks:create', 'tasks:update', 'tasks:delete', 'time-entries:view:all', 'time-entries:create:all', 'time-entries:update:all', 'time-entries:delete:all', 'time-entries:view:own', 'time-entries:create:own', 'time-entries:update:own', 'time-entries:delete:own', 'tags:view', 'tags:create', 'tags:update', 'tags:delete', 'clients:view', 'clients:create', 'clients:update', 'clients:delete', 'organizations:view', 'organizations:update', 'import', 'members:view', 'members:invite-placeholder', ])->description('Administrator users can perform any action.'); Jetstream::role(Role::Manager->value, 'Manager', [ 'projects:view', 'projects:view:all', 'projects:create', 'projects:update', 'projects:delete', 'project-members:view', 'project-members:create', 'project-members:update', 'project-members:delete', 'tasks:view', 'tasks:create', 'tasks:update', 'tasks:delete', 'time-entries:view:all', 'time-entries:create:all', 'time-entries:update:all', 'time-entries:delete:all', 'time-entries:view:own', 'time-entries:create:own', 'time-entries:update:own', 'time-entries:delete:own', 'tags:view', 'tags:create', 'tags:update', 'tags:delete', 'clients:view', 'clients:create', 'clients:update', 'clients:delete', 'organizations:view', 'members:view', ])->description('Managers have the ability to read, create, and update their own time entries as well as those of their team.'); Jetstream::role(Role::Employee->value, 'Employee', [ 'projects:view', 'tags:view', 'tasks:view', 'time-entries:view:own', 'time-entries:create:own', 'time-entries:update:own', 'time-entries:delete:own', 'organizations:view', ])->description('Employees have the ability to read, create, and update their own time entries.'); Jetstream::role(Role::Placeholder->value, 'Placeholder', [ ])->description('Placeholders are used for importing data. They cannot log in and have no permissions.'); Jetstream::inertia() ->whenRendering( 'Profile/Show', function (Request $request, array $data): array { return array_merge($data, [ 'timezones' => $this->app->get(TimezoneService::class)->getSelectOptions(), 'weekdays' => Weekday::toSelectArray(), ]); } ) ->whenRendering( 'Teams/Show', function (Request $request, array $data): array { return array_merge($data, [ 'currencies' => array_map(function (Currency $currency): string { return $currency->getName(); }, ISOCurrencyProvider::getInstance()->getAvailableCurrencies()), ]); } ); } }