mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
feat(authentication): implement createUser
CB-109
This commit is contained in:
@@ -34,7 +34,7 @@ export const UsersTable = observer(function UsersTable({ users }: Props) {
|
||||
return styled(useStyles(styles))(
|
||||
<Table>
|
||||
<TableHeader>
|
||||
<TableColumnHeader>User login</TableColumnHeader>
|
||||
<TableColumnHeader>User name</TableColumnHeader>
|
||||
<TableColumnHeader></TableColumnHeader>
|
||||
</TableHeader>
|
||||
<TableBody>
|
||||
|
||||
@@ -9,14 +9,36 @@
|
||||
import { injectable } from '@dbeaver/core/di';
|
||||
import { CachedResource, GraphQLService, AdminUserInfo } from '@dbeaver/core/sdk';
|
||||
|
||||
import { AuthProviderService } from '../AuthProviderService';
|
||||
|
||||
@injectable()
|
||||
export class UsersManagerService {
|
||||
readonly users = new CachedResource([], this.refreshAsync.bind(this), data => !!data.length)
|
||||
constructor(
|
||||
private graphQLService: GraphQLService
|
||||
private graphQLService: GraphQLService,
|
||||
private authProviderService: AuthProviderService,
|
||||
) {
|
||||
}
|
||||
|
||||
async create(userId: string): Promise<AdminUserInfo> {
|
||||
const { user } = await this.graphQLService.gql.createUser({ userId });
|
||||
|
||||
// TODO: maybe better to do refresh
|
||||
this.users.data.push(user as AdminUserInfo);
|
||||
return user as AdminUserInfo;
|
||||
}
|
||||
|
||||
async updateCredentials(userId: string, credentials: Record<string, any>) {
|
||||
const provider = 'local';
|
||||
const processedCredentials = this.authProviderService.processCredentials(provider, credentials);
|
||||
|
||||
await this.graphQLService.gql.setUserCredentials({
|
||||
providerId: provider,
|
||||
userId,
|
||||
credentials: processedCredentials,
|
||||
});
|
||||
}
|
||||
|
||||
private async refreshAsync(data: AdminUserInfo[]): Promise<AdminUserInfo[]> {
|
||||
const { users } = await this.graphQLService.gql.getUsersList();
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ export class AuthProviderService {
|
||||
private graphQLService: GraphQLService,
|
||||
) { }
|
||||
|
||||
processCredentials(providerId: string, credentials: any) {
|
||||
processCredentials(providerId: string, credentials: Record<string, any>) {
|
||||
const provider = this.providers.data.find(provider => provider.id === providerId);
|
||||
|
||||
if (!provider) {
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
|
||||
import { observable, computed } from 'mobx';
|
||||
|
||||
import { ErrorDetailsDialog } from '@dbeaver/core/app';
|
||||
import { injectable, IInitializableController, IDestructibleController } from '@dbeaver/core/di';
|
||||
import { CommonDialogService } from '@dbeaver/core/dialogs';
|
||||
import { NotificationService } from '@dbeaver/core/eventsLog';
|
||||
import { GQLErrorCatcher } from '@dbeaver/core/sdk';
|
||||
import { ErrorDetailsDialog } from '@dbeaver/core/app';
|
||||
|
||||
import { AuthInfoService } from '../AuthInfoService';
|
||||
import { AuthProviderService, AuthProvider } from '../AuthProviderService';
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
query createUser($userId: ID!) {
|
||||
user: createUser(userId: $userId) {
|
||||
userId
|
||||
|
||||
#metaParameters
|
||||
#configurationParameters
|
||||
#grantedRoles
|
||||
}
|
||||
}
|
||||
@@ -821,6 +821,13 @@ export type ChangeSessionLanguageMutationVariables = {
|
||||
|
||||
export type ChangeSessionLanguageMutation = Pick<Mutation, 'changeSessionLanguage'>;
|
||||
|
||||
export type CreateUserQueryVariables = {
|
||||
userId: Scalars['ID'];
|
||||
};
|
||||
|
||||
|
||||
export type CreateUserQuery = { user: Pick<AdminUserInfo, 'userId'> };
|
||||
|
||||
export type DeleteUserQueryVariables = {
|
||||
userId: Scalars['ID'];
|
||||
};
|
||||
@@ -1337,6 +1344,13 @@ export const ChangeSessionLanguageDocument = `
|
||||
changeSessionLanguage(locale: $locale)
|
||||
}
|
||||
`;
|
||||
export const CreateUserDocument = `
|
||||
query createUser($userId: ID!) {
|
||||
user: createUser(userId: $userId) {
|
||||
userId
|
||||
}
|
||||
}
|
||||
`;
|
||||
export const DeleteUserDocument = `
|
||||
query deleteUser($userId: ID!) {
|
||||
deleteUser(userId: $userId)
|
||||
@@ -1835,6 +1849,9 @@ export function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper =
|
||||
changeSessionLanguage(variables: ChangeSessionLanguageMutationVariables): Promise<ChangeSessionLanguageMutation> {
|
||||
return withWrapper(() => client.request<ChangeSessionLanguageMutation>(ChangeSessionLanguageDocument, variables));
|
||||
},
|
||||
createUser(variables: CreateUserQueryVariables): Promise<CreateUserQuery> {
|
||||
return withWrapper(() => client.request<CreateUserQuery>(CreateUserDocument, variables));
|
||||
},
|
||||
deleteUser(variables: DeleteUserQueryVariables): Promise<DeleteUserQuery> {
|
||||
return withWrapper(() => client.request<DeleteUserQuery>(DeleteUserDocument, variables));
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user