mirror of
https://github.com/stack-auth/stack.git
synced 2026-06-13 21:01:21 +08:00
get it all working
This commit is contained in:
parent
68b3200637
commit
255b2212c6
@ -871,51 +871,66 @@ export class _StackClientAppImplIncomplete<HasTokenStore extends boolean, Projec
|
||||
await app._interface.leaveTeam(team.id, session);
|
||||
// TODO: refresh cache
|
||||
},
|
||||
async listPermissions(scope: Team, options?: { recursive?: boolean }): Promise<TeamPermission[]> {
|
||||
const recursive = options?.recursive ?? true;
|
||||
const permissions = Result.orThrow(await app._currentUserPermissionsCache.getOrWait([session, scope.id, recursive], "write-only"));
|
||||
return permissions.map((crud) => app._clientTeamPermissionFromCrud(crud));
|
||||
},
|
||||
async listProjectPermissions(options?: { recursive?: boolean }): Promise<TeamPermission[]> {
|
||||
const recursive = options?.recursive ?? true;
|
||||
const permissions = Result.orThrow(await app._currentUserProjectPermissionsCache.getOrWait([session, recursive], "write-only"));
|
||||
return permissions.map((crud) => app._clientTeamPermissionFromCrud(crud));
|
||||
async listPermissions(scopeOrOptions?: Team | { recursive?: boolean }, options?: { recursive?: boolean }): Promise<TeamPermission[]> {
|
||||
if (scopeOrOptions && 'id' in scopeOrOptions) {
|
||||
const scope = scopeOrOptions;
|
||||
const recursive = options?.recursive ?? true;
|
||||
const permissions = Result.orThrow(await app._currentUserPermissionsCache.getOrWait([session, scope.id, recursive], "write-only"));
|
||||
return permissions.map((crud) => app._clientTeamPermissionFromCrud(crud));
|
||||
} else {
|
||||
const opts = scopeOrOptions;
|
||||
const recursive = opts?.recursive ?? true;
|
||||
const permissions = Result.orThrow(await app._currentUserProjectPermissionsCache.getOrWait([session, recursive], "write-only"));
|
||||
return permissions.map((crud) => app._clientTeamPermissionFromCrud(crud));
|
||||
}
|
||||
},
|
||||
// IF_PLATFORM react-like
|
||||
usePermissions(scope: Team, options?: { recursive?: boolean }): TeamPermission[] {
|
||||
const recursive = options?.recursive ?? true;
|
||||
const permissions = useAsyncCache(app._currentUserPermissionsCache, [session, scope.id, recursive] as const, "user.usePermissions()");
|
||||
return useMemo(() => permissions.map((crud) => app._clientTeamPermissionFromCrud(crud)), [permissions]);
|
||||
},
|
||||
useProjectPermissions(options?: { recursive?: boolean }): TeamPermission[] {
|
||||
const recursive = options?.recursive ?? true;
|
||||
const permissions = useAsyncCache(app._currentUserProjectPermissionsCache, [session, recursive] as const, "user.useProjectPermissions()");
|
||||
return useMemo(() => permissions.map((crud) => app._clientTeamPermissionFromCrud(crud)), [permissions]);
|
||||
usePermissions(scopeOrOptions?: Team | { recursive?: boolean }, options?: { recursive?: boolean }): TeamPermission[] {
|
||||
if (scopeOrOptions && 'id' in scopeOrOptions) {
|
||||
const scope = scopeOrOptions;
|
||||
const recursive = options?.recursive ?? true;
|
||||
const permissions = useAsyncCache(app._currentUserPermissionsCache, [session, scope.id, recursive] as const, "user.usePermissions()");
|
||||
return useMemo(() => permissions.map((crud) => app._clientTeamPermissionFromCrud(crud)), [permissions]);
|
||||
} else {
|
||||
const opts = scopeOrOptions;
|
||||
const recursive = opts?.recursive ?? true;
|
||||
const permissions = useAsyncCache(app._currentUserProjectPermissionsCache, [session, recursive] as const, "user.usePermissions()");
|
||||
return useMemo(() => permissions.map((crud) => app._clientTeamPermissionFromCrud(crud)), [permissions]);
|
||||
}
|
||||
},
|
||||
// END_PLATFORM
|
||||
// IF_PLATFORM react-like
|
||||
usePermission(scope: Team, permissionId: string): TeamPermission | null {
|
||||
const permissions = this.usePermissions(scope);
|
||||
return useMemo(() => permissions.find((p) => p.id === permissionId) ?? null, [permissions, permissionId]);
|
||||
},
|
||||
useProjectPermission(permissionId: string): TeamPermission | null {
|
||||
const permissions = this.useProjectPermissions();
|
||||
return useMemo(() => permissions.find((p) => p.id === permissionId) ?? null, [permissions, permissionId]);
|
||||
usePermission(scopeOrPermissionId: Team | string, permissionId?: string): TeamPermission | null {
|
||||
if (scopeOrPermissionId && typeof scopeOrPermissionId !== 'string') {
|
||||
const scope = scopeOrPermissionId;
|
||||
const permissions = this.usePermissions(scope);
|
||||
return useMemo(() => permissions.find((p) => p.id === permissionId) ?? null, [permissions, permissionId]);
|
||||
} else {
|
||||
const pid = scopeOrPermissionId;
|
||||
const permissions = this.usePermissions();
|
||||
return useMemo(() => permissions.find((p) => p.id === pid) ?? null, [permissions, pid]);
|
||||
}
|
||||
},
|
||||
// END_PLATFORM
|
||||
async getPermission(scope: Team, permissionId: string): Promise<TeamPermission | null> {
|
||||
const permissions = await this.listPermissions(scope);
|
||||
return permissions.find((p) => p.id === permissionId) ?? null;
|
||||
async getPermission(scopeOrPermissionId: Team | string, permissionId?: string): Promise<TeamPermission | null> {
|
||||
if (scopeOrPermissionId && typeof scopeOrPermissionId !== 'string') {
|
||||
const scope = scopeOrPermissionId;
|
||||
const permissions = await this.listPermissions(scope);
|
||||
return permissions.find((p) => p.id === permissionId) ?? null;
|
||||
} else {
|
||||
const pid = scopeOrPermissionId;
|
||||
const permissions = await this.listPermissions();
|
||||
return permissions.find((p) => p.id === pid) ?? null;
|
||||
}
|
||||
},
|
||||
async hasPermission(scope: Team, permissionId: string): Promise<boolean> {
|
||||
return (await this.getPermission(scope, permissionId)) !== null;
|
||||
},
|
||||
async getProjectPermission(permissionId: string): Promise<TeamPermission | null> {
|
||||
const permissions = await this.listProjectPermissions();
|
||||
return permissions.find((p) => p.id === permissionId) ?? null;
|
||||
},
|
||||
async hasProjectPermission(permissionId: string): Promise<boolean> {
|
||||
return (await this.getProjectPermission(permissionId)) !== null;
|
||||
async hasPermission(scopeOrPermissionId: Team | string, permissionId?: string): Promise<boolean> {
|
||||
if (scopeOrPermissionId && typeof scopeOrPermissionId !== 'string') {
|
||||
const scope = scopeOrPermissionId;
|
||||
return (await this.getPermission(scope, permissionId as string)) !== null;
|
||||
} else {
|
||||
const pid = scopeOrPermissionId;
|
||||
return (await this.getPermission(pid)) !== null;
|
||||
}
|
||||
},
|
||||
async update(update) {
|
||||
return await app._updateClientUser(update, session);
|
||||
|
||||
@ -322,55 +322,66 @@ export class _StackServerAppImplIncomplete<HasTokenStore extends boolean, Projec
|
||||
await app._interface.leaveServerTeam({ teamId: team.id, userId: crud.id });
|
||||
// TODO: refresh cache
|
||||
},
|
||||
async listPermissions(scope: Team, options?: { recursive?: boolean }): Promise<AdminTeamPermission[]> {
|
||||
const recursive = options?.recursive ?? true;
|
||||
const permissions = Result.orThrow(await app._serverTeamUserPermissionsCache.getOrWait([scope.id, crud.id, recursive], "write-only"));
|
||||
return permissions.map((crud) => app._serverPermissionFromCrud(crud));
|
||||
async listPermissions(scopeOrOptions?: Team | { recursive?: boolean }, options?: { recursive?: boolean }): Promise<AdminTeamPermission[]> {
|
||||
if (scopeOrOptions && 'id' in scopeOrOptions) {
|
||||
const scope = scopeOrOptions;
|
||||
const recursive = options?.recursive ?? true;
|
||||
const permissions = Result.orThrow(await app._serverTeamUserPermissionsCache.getOrWait([scope.id, crud.id, recursive], "write-only"));
|
||||
return permissions.map((crud) => app._serverPermissionFromCrud(crud));
|
||||
} else {
|
||||
const opts = scopeOrOptions;
|
||||
const recursive = opts?.recursive ?? true;
|
||||
const permissions = Result.orThrow(await app._serverUserProjectPermissionsCache.getOrWait([crud.id, recursive], "write-only"));
|
||||
return permissions.map((crud) => app._serverPermissionFromCrud(crud));
|
||||
}
|
||||
},
|
||||
// IF_PLATFORM react-like
|
||||
usePermissions(scope: Team, options?: { recursive?: boolean }): AdminTeamPermission[] {
|
||||
const recursive = options?.recursive ?? true;
|
||||
const permissions = useAsyncCache(app._serverTeamUserPermissionsCache, [scope.id, crud.id, recursive] as const, "user.usePermissions()");
|
||||
return useMemo(() => permissions.map((crud) => app._serverPermissionFromCrud(crud)), [permissions]);
|
||||
usePermissions(scopeOrOptions?: Team | { recursive?: boolean }, options?: { recursive?: boolean }): AdminTeamPermission[] {
|
||||
if (scopeOrOptions && 'id' in scopeOrOptions) {
|
||||
const scope = scopeOrOptions;
|
||||
const recursive = options?.recursive ?? true;
|
||||
const permissions = useAsyncCache(app._serverTeamUserPermissionsCache, [scope.id, crud.id, recursive] as const, "user.usePermissions()");
|
||||
return useMemo(() => permissions.map((crud) => app._serverPermissionFromCrud(crud)), [permissions]);
|
||||
} else {
|
||||
const opts = scopeOrOptions;
|
||||
const recursive = opts?.recursive ?? true;
|
||||
const permissions = useAsyncCache(app._serverUserProjectPermissionsCache, [crud.id, recursive] as const, "user.usePermissions()");
|
||||
return useMemo(() => permissions.map((crud) => app._serverPermissionFromCrud(crud)), [permissions]);
|
||||
}
|
||||
},
|
||||
// END_PLATFORM
|
||||
async getPermission(scope: Team, permissionId: string): Promise<AdminTeamPermission | null> {
|
||||
const permissions = await this.listPermissions(scope);
|
||||
return permissions.find((p) => p.id === permissionId) ?? null;
|
||||
async getPermission(scopeOrPermissionId: Team | string, permissionId?: string): Promise<AdminTeamPermission | null> {
|
||||
if (scopeOrPermissionId && typeof scopeOrPermissionId !== 'string') {
|
||||
const scope = scopeOrPermissionId;
|
||||
const permissions = await this.listPermissions(scope);
|
||||
return permissions.find((p) => p.id === permissionId) ?? null;
|
||||
} else {
|
||||
const pid = scopeOrPermissionId;
|
||||
const permissions = await this.listPermissions();
|
||||
return permissions.find((p) => p.id === pid) ?? null;
|
||||
}
|
||||
},
|
||||
// IF_PLATFORM react-like
|
||||
usePermission(scope: Team, permissionId: string): AdminTeamPermission | null {
|
||||
const permissions = this.usePermissions(scope);
|
||||
return useMemo(() => permissions.find((p) => p.id === permissionId) ?? null, [permissions, permissionId]);
|
||||
usePermission(scopeOrPermissionId: Team | string, permissionId?: string): AdminTeamPermission | null {
|
||||
if (scopeOrPermissionId && typeof scopeOrPermissionId !== 'string') {
|
||||
const scope = scopeOrPermissionId;
|
||||
const permissions = this.usePermissions(scope);
|
||||
return useMemo(() => permissions.find((p) => p.id === permissionId) ?? null, [permissions, permissionId]);
|
||||
} else {
|
||||
const pid = scopeOrPermissionId;
|
||||
const permissions = this.usePermissions();
|
||||
return useMemo(() => permissions.find((p) => p.id === pid) ?? null, [permissions, pid]);
|
||||
}
|
||||
},
|
||||
// END_PLATFORM
|
||||
async hasPermission(scope: Team, permissionId: string): Promise<boolean> {
|
||||
return await this.getPermission(scope, permissionId) !== null;
|
||||
},
|
||||
async listProjectPermissions(options?: { recursive?: boolean }): Promise<AdminTeamPermission[]> {
|
||||
const recursive = options?.recursive ?? true;
|
||||
const permissions = Result.orThrow(await app._serverUserProjectPermissionsCache.getOrWait([crud.id, recursive], "write-only"));
|
||||
return permissions.map((crud) => app._serverPermissionFromCrud(crud));
|
||||
},
|
||||
// IF_PLATFORM react-like
|
||||
useProjectPermissions(options?: { recursive?: boolean }): AdminTeamPermission[] {
|
||||
const recursive = options?.recursive ?? true;
|
||||
const permissions = useAsyncCache(app._serverUserProjectPermissionsCache, [crud.id, recursive] as const, "user.useProjectPermissions()");
|
||||
return useMemo(() => permissions.map((crud) => app._serverPermissionFromCrud(crud)), [permissions]);
|
||||
},
|
||||
// END_PLATFORM
|
||||
async getProjectPermission(permissionId: string): Promise<AdminTeamPermission | null> {
|
||||
const permissions = await this.listProjectPermissions();
|
||||
return permissions.find((p) => p.id === permissionId) ?? null;
|
||||
},
|
||||
// IF_PLATFORM react-like
|
||||
useProjectPermission(permissionId: string): AdminTeamPermission | null {
|
||||
const permissions = this.useProjectPermissions();
|
||||
return useMemo(() => permissions.find((p) => p.id === permissionId) ?? null, [permissions, permissionId]);
|
||||
},
|
||||
// END_PLATFORM
|
||||
async hasProjectPermission(permissionId: string): Promise<boolean> {
|
||||
return await this.getProjectPermission(permissionId) !== null;
|
||||
async hasPermission(scopeOrPermissionId: Team | string, permissionId?: string): Promise<boolean> {
|
||||
if (scopeOrPermissionId && typeof scopeOrPermissionId !== 'string') {
|
||||
const scope = scopeOrPermissionId;
|
||||
return (await this.getPermission(scope, permissionId as string)) !== null;
|
||||
} else {
|
||||
const pid = scopeOrPermissionId;
|
||||
return (await this.getPermission(pid)) !== null;
|
||||
}
|
||||
},
|
||||
async update(update: ServerUserUpdateOptions) {
|
||||
await app._updateServerUser(crud.id, update);
|
||||
|
||||
@ -187,12 +187,20 @@ export type UserExtra = {
|
||||
// END_PLATFORM
|
||||
|
||||
hasPermission(scope: Team, permissionId: string): Promise<boolean>,
|
||||
getProjectPermission(permissionId: string): Promise<TeamPermission | null>,
|
||||
hasProjectPermission(permissionId: string): Promise<boolean>,
|
||||
listProjectPermissions(options?: { recursive?: boolean }): Promise<TeamPermission[]>,
|
||||
hasPermission(permissionId: string): Promise<boolean>,
|
||||
|
||||
getPermission(scope: Team, permissionId: string): Promise<TeamPermission | null>,
|
||||
getPermission(permissionId: string): Promise<TeamPermission | null>,
|
||||
|
||||
listPermissions(scope: Team, options?: { recursive?: boolean }): Promise<TeamPermission[]>,
|
||||
listPermissions(options?: { recursive?: boolean }): Promise<TeamPermission[]>,
|
||||
|
||||
// IF_PLATFORM react-like
|
||||
useProjectPermissions(options?: { recursive?: boolean }): TeamPermission[],
|
||||
useProjectPermission(permissionId: string): TeamPermission | null,
|
||||
usePermissions(scope: Team, options?: { recursive?: boolean }): TeamPermission[],
|
||||
usePermissions(options?: { recursive?: boolean }): TeamPermission[],
|
||||
|
||||
usePermission(scope: Team, permissionId: string): TeamPermission | null,
|
||||
usePermission(permissionId: string): TeamPermission | null,
|
||||
// END_PLATFORM
|
||||
|
||||
readonly selectedTeam: Team | null,
|
||||
@ -277,12 +285,21 @@ export type ServerBaseUser = {
|
||||
grantPermission(scope: Team, permissionId: string): Promise<void>,
|
||||
revokePermission(scope: Team, permissionId: string): Promise<void>,
|
||||
|
||||
getProjectPermission(permissionId: string): Promise<TeamPermission | null>,
|
||||
hasProjectPermission(permissionId: string): Promise<boolean>,
|
||||
listProjectPermissions(options?: { recursive?: boolean }): Promise<TeamPermission[]>,
|
||||
getPermission(scope: Team, permissionId: string): Promise<TeamPermission | null>,
|
||||
getPermission(permissionId: string): Promise<TeamPermission | null>,
|
||||
|
||||
hasPermission(scope: Team, permissionId: string): Promise<boolean>,
|
||||
hasPermission(permissionId: string): Promise<boolean>,
|
||||
|
||||
listPermissions(scope: Team, options?: { recursive?: boolean }): Promise<TeamPermission[]>,
|
||||
listPermissions(options?: { recursive?: boolean }): Promise<TeamPermission[]>,
|
||||
|
||||
// IF_PLATFORM react-like
|
||||
useProjectPermissions(options?: { recursive?: boolean }): TeamPermission[],
|
||||
useProjectPermission(permissionId: string): TeamPermission | null,
|
||||
usePermissions(scope: Team, options?: { recursive?: boolean }): TeamPermission[],
|
||||
usePermissions(options?: { recursive?: boolean }): TeamPermission[],
|
||||
|
||||
usePermission(scope: Team, permissionId: string): TeamPermission | null,
|
||||
usePermission(permissionId: string): TeamPermission | null,
|
||||
// END_PLATFORM
|
||||
|
||||
/**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user