From 109d27fbf55158bf7bb7a85f94807f7a72ff9662 Mon Sep 17 00:00:00 2001 From: harsh mahajan Date: Thu, 4 Jun 2026 14:29:13 +0530 Subject: [PATCH] feat: remove granularProjectAccess feature flag from project-specific roles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gate solely on supportsProjectSpecificRoles plan flag — no feature flag needed. Also always fetch orgProjects in page load since it is no longer conditionally needed. --- .../createMember.svelte | 6 +----- .../members/+page.svelte | 7 +------ .../members/+page.ts | 19 +++++++------------ .../members/edit.svelte | 6 +----- 4 files changed, 10 insertions(+), 28 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/createMember.svelte b/src/routes/(console)/organization-[organization]/createMember.svelte index eaaf396e8..f03644e2b 100644 --- a/src/routes/(console)/organization-[organization]/createMember.svelte +++ b/src/routes/(console)/organization-[organization]/createMember.svelte @@ -11,8 +11,6 @@ import { Submit, trackEvent, trackError } from '$lib/actions/analytics'; import { isCloud, isSelfHosted } from '$lib/system'; import { roles, buildProjectRole } from '$lib/stores/billing'; - import { flags } from '$lib/flags'; - import { user } from '$lib/stores/user'; import InputSelect from '$lib/elements/forms/inputSelect.svelte'; import Roles from '$lib/components/roles/roles.svelte'; import { Icon, Popover, Layout } from '@appwrite.io/pink-svelte'; @@ -29,9 +27,7 @@ } = $props(); const supportsProjectRoles = $derived( - isCloud && - flags.granularProjectAccess({ account: $user, organization: $organization }) && - !!$currentPlan?.supportsProjectSpecificRoles + isCloud && !!$currentPlan?.supportsProjectSpecificRoles ); let email = $state(''); diff --git a/src/routes/(console)/organization-[organization]/members/+page.svelte b/src/routes/(console)/organization-[organization]/members/+page.svelte index 77181e9a6..ce8d5189c 100644 --- a/src/routes/(console)/organization-[organization]/members/+page.svelte +++ b/src/routes/(console)/organization-[organization]/members/+page.svelte @@ -20,10 +20,8 @@ } from '$lib/helpers/tooltipContent'; import { addNotification } from '$lib/stores/notifications'; import { currentPlan, newMemberModal, organization } from '$lib/stores/organization'; - import { flags } from '$lib/flags'; import { isOwner } from '$lib/stores/roles'; import { sdk } from '$lib/stores/sdk'; - import { user } from '$lib/stores/user'; import type { Models } from '@appwrite.io/console'; import Delete from '../deleteMember.svelte'; import Edit from './edit.svelte'; @@ -63,10 +61,7 @@ $: isButtonDisabled = isCloud && (($readOnly && !GRACE_PERIOD_OVERRIDE) || (isLimited && memberCount >= limit)); $: supportsOrgRoles = isCloud && !!$currentPlan?.supportsOrganizationRoles; - $: supportsProjectRoles = - isCloud && - flags.granularProjectAccess({ account: $user, organization: $organization }) && - !!$currentPlan?.supportsProjectSpecificRoles; + $: supportsProjectRoles = isCloud && !!$currentPlan?.supportsProjectSpecificRoles; const resend = async (member: Models.Membership) => { try { diff --git a/src/routes/(console)/organization-[organization]/members/+page.ts b/src/routes/(console)/organization-[organization]/members/+page.ts index cf1e4fd9b..9d1dd1cf7 100644 --- a/src/routes/(console)/organization-[organization]/members/+page.ts +++ b/src/routes/(console)/organization-[organization]/members/+page.ts @@ -1,12 +1,11 @@ import { Dependencies, PAGE_LIMIT } from '$lib/constants'; -import { flags } from '$lib/flags'; import { getLimit, getPage, getSearch, pageToOffset } from '$lib/helpers/load'; import { sdk } from '$lib/stores/sdk'; import { Query } from '@appwrite.io/console'; import type { PageLoad } from './$types'; export const load: PageLoad = async ({ url, params, route, depends, parent }) => { - const { account, organization } = await parent(); + await parent(); depends(Dependencies.ORGANIZATION); depends(Dependencies.MEMBERS); @@ -15,22 +14,18 @@ export const load: PageLoad = async ({ url, params, route, depends, parent }) => const limit = getLimit(url, route, PAGE_LIMIT); const offset = pageToOffset(page, limit); - const supportsProjectRoles = flags.granularProjectAccess({ account, organization }); - const [organizationMembers, orgProjects] = await Promise.all([ sdk.forConsole.teams.listMemberships({ teamId: params.organization, queries: [Query.limit(limit), Query.offset(offset)], search }), - supportsProjectRoles - ? sdk.forConsole - .organization(params.organization) - .listProjects({ - queries: [Query.limit(100), Query.equal('teamId', params.organization)] - }) - .catch(() => null) - : null + sdk.forConsole + .organization(params.organization) + .listProjects({ + queries: [Query.limit(100), Query.equal('teamId', params.organization)] + }) + .catch(() => null) ]); return { diff --git a/src/routes/(console)/organization-[organization]/members/edit.svelte b/src/routes/(console)/organization-[organization]/members/edit.svelte index dc549567a..c272c5a69 100644 --- a/src/routes/(console)/organization-[organization]/members/edit.svelte +++ b/src/routes/(console)/organization-[organization]/members/edit.svelte @@ -19,8 +19,6 @@ buildProjectRole } from '$lib/stores/billing'; import { isCloud, isSelfHosted } from '$lib/system'; - import { flags } from '$lib/flags'; - import { user } from '$lib/stores/user'; import ProjectAccessSelector from '../projectAccessSelector.svelte'; let { @@ -34,9 +32,7 @@ } = $props(); const supportsProjectRoles = $derived( - isCloud && - flags.granularProjectAccess({ account: $user, organization: $organization }) && - !!$currentPlan?.supportsProjectSpecificRoles + isCloud && !!$currentPlan?.supportsProjectSpecificRoles ); const defaultRole = isSelfHosted ? 'owner' : 'developer';