diff --git a/apps/web/app/(use-page-wrapper)/(main-nav)/teams/server-page.tsx b/apps/web/app/(use-page-wrapper)/(main-nav)/teams/server-page.tsx index 76d67b4aa2..2b3eb0dce6 100644 --- a/apps/web/app/(use-page-wrapper)/(main-nav)/teams/server-page.tsx +++ b/apps/web/app/(use-page-wrapper)/(main-nav)/teams/server-page.tsx @@ -2,11 +2,12 @@ import type { SearchParams } from "app/_types"; import type { Session } from "next-auth"; import { unstable_cache } from "next/cache"; -import { checkAdminOrOwner } from "@calcom/features/auth/lib/checkAdminOrOwner"; import { TeamsListing } from "@calcom/features/ee/teams/components/TeamsListing"; +import { PermissionCheckService } from "@calcom/features/pbac/services/permission-check.service"; import { TeamRepository } from "@calcom/lib/server/repository/team"; import { TeamService } from "@calcom/lib/server/service/teamService"; import prisma from "@calcom/prisma"; +import { MembershipRole } from "@calcom/prisma/enums"; import { TRPCError } from "@trpc/server"; @@ -49,21 +50,29 @@ export const ServerTeamsListing = async ({ const teams = await getCachedTeams(userId); const userProfile = session?.user?.profile; const orgId = userProfile?.organizationId ?? session?.user.org?.id; - const orgRole = - session?.user?.org?.role ?? - userProfile?.organization?.members.find((m: { userId: number }) => m.userId === userId)?.role; - const isOrgAdminOrOwner = checkAdminOrOwner(orgRole); + + const permissionCheckService = new PermissionCheckService(); + const canCreateTeam = orgId + ? await permissionCheckService.checkPermission({ + userId: session.user.id, + teamId: orgId, + permission: "team.create", + fallbackRoles: [MembershipRole.ADMIN, MembershipRole.OWNER], + }) + : false; return { Main: ( ), - CTA: !orgId || isOrgAdminOrOwner ? : null, + CTA: !orgId || canCreateTeam ? : null, }; }; diff --git a/packages/features/ee/teams/components/TeamsListing.tsx b/packages/features/ee/teams/components/TeamsListing.tsx index e40860b87d..4b1f0dccf7 100644 --- a/packages/features/ee/teams/components/TeamsListing.tsx +++ b/packages/features/ee/teams/components/TeamsListing.tsx @@ -19,7 +19,9 @@ import TeamList from "./TeamList"; type TeamsListingProps = { orgId: number | null; - isOrgAdmin: boolean; + permissions: { + canCreateTeam: boolean; + }; teams: RouterOutputs["viewer"]["teams"]["list"]; teamNameFromInvite: string | null; errorMsgFromInvite: string | null; @@ -27,7 +29,7 @@ type TeamsListingProps = { export function TeamsListing({ orgId, - isOrgAdmin, + permissions, teams: data, teamNameFromInvite, errorMsgFromInvite, @@ -51,7 +53,7 @@ export function TeamsListing({ } ); - const isCreateTeamButtonDisabled = !!(orgId && !isOrgAdmin); + const isCreateTeamButtonDisabled = !!(orgId && !permissions.canCreateTeam); const features = [ { @@ -128,7 +130,7 @@ export function TeamsListing({ features={features} background="/tips/teams" buttons={ - !orgId || isOrgAdmin ? ( + !orgId || permissions.canCreateTeam ? (