diff --git a/.changeset/has-role-autocomplete.md b/.changeset/has-role-autocomplete.md new file mode 100644 index 00000000000..1474c52b101 --- /dev/null +++ b/.changeset/has-role-autocomplete.md @@ -0,0 +1,8 @@ +--- +'@clerk/shared': patch +'@clerk/nextjs': patch +--- + +Fix IDE autocomplete for custom Organization Roles in server-side `has({ role })` and `auth.protect({ role })`. + +Previously, defining roles via `ClerkAuthorization` typed the values correctly but editors often failed to suggest Role literals inside `has({ role: "…" })`, while Permission suggestions already worked. Role checks now use the same generic typing path as Permissions so Role completions appear as expected. diff --git a/packages/nextjs/src/server/protect.ts b/packages/nextjs/src/server/protect.ts index 1e72f7128fd..d37c4c951c3 100644 --- a/packages/nextjs/src/server/protect.ts +++ b/packages/nextjs/src/server/protect.ts @@ -14,6 +14,7 @@ import type { CheckAuthorizationParamsWithCustomPermissions, CheckAuthorizationWithCustomPermissions, OrganizationCustomPermissionKey, + OrganizationCustomRoleKey, } from '@clerk/shared/types'; import { constants as nextConstants } from '../constants'; @@ -43,8 +44,8 @@ export interface AuthProtect { * auth.protect({ permission: 'org:admin:example1' }); * auth.protect({ role: 'admin' }); */ -
( - params?: CheckAuthorizationParamsFromSessionClaims
, +
( + params?: CheckAuthorizationParamsFromSessionClaims
,
options?: AuthProtectOptions,
): Promise (
- isAuthorizedParams: CheckAuthorizationParamsFromSessionClaims ,
+export type CheckAuthorizationFromSessionClaims = <
+ P extends OrganizationCustomPermissionKey,
+ R extends OrganizationCustomRoleKey = OrganizationCustomRoleKey,
+>(
+ isAuthorizedParams: CheckAuthorizationParamsFromSessionClaims ,
) => boolean;
/**
* @interface
*/
-export type CheckAuthorizationParamsFromSessionClaims = WithReverification<
+export type CheckAuthorizationParamsFromSessionClaims<
+ P extends OrganizationCustomPermissionKey,
+ R extends OrganizationCustomRoleKey = OrganizationCustomRoleKey,
+> = WithReverification<
| {
/**
* The [Role](https://clerk.com/docs/guides/organizations/control-access/roles-and-permissions) to check for.
*/
- role: OrganizationCustomRoleKey;
+ role: R;
/**
* The [Permission](https://clerk.com/docs/guides/organizations/control-access/roles-and-permissions) to check for.
*/