Skip to content

Commit 7846482

Browse files
authored
Merge pull request #42 from import-ai/feat/roles
feat: add permission API
2 parents 3296a1b + ac1500a commit 7846482

32 files changed

+906
-136
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
"@nestjs/typeorm": "^11.0.0",
6262
"bcrypt": "^5.1.1",
6363
"cache-manager": "^6.4.2",
64+
"class-transformer": "^0.5.1",
6465
"class-validator": "^0.14.1",
6566
"handlebars": "^4.7.8",
6667
"lodash-es": "^4.17.21",

pnpm-lock.yaml

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/api-key/api-key.entity.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { Base } from 'src/common/base.entity';
22
import { User } from 'src/user/user.entity';
3-
import { UserRole } from 'src/user-role/user-role.entity';
43
import {
54
Column,
65
Entity,
@@ -20,8 +19,4 @@ export class APIKey extends Base {
2019
@ManyToOne(() => User, (user) => user.apiKey)
2120
@JoinColumn({ name: 'user_id' })
2221
user: User;
23-
24-
@ManyToOne(() => UserRole, (userRole) => userRole.apiKey)
25-
@JoinColumn({ name: 'role' })
26-
role: UserRole;
2722
}

src/app/app.module.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@ import { TasksModule } from 'src/tasks/tasks.module';
1010
import { WizardModule } from 'src/wizard/wizard.module';
1111
import { APIKeyModule } from 'src/api-key/api-key.module';
1212
import { ConfigModule, ConfigService } from '@nestjs/config';
13-
import { UserRoleModule } from 'src/user-role/user-role.module';
1413
import { ResourcesModule } from 'src/resources/resources.module';
1514
import { SnakeCaseInterceptor } from 'src/interceptor/snake-case';
1615
import { NamespacesModule } from 'src/namespaces/namespaces.module';
16+
import { PermissionsModule } from 'src/permissions/permissions.module';
17+
import { GroupsModule } from 'src/groups/groups.module';
1718

1819
@Module({
1920
controllers: [AppController],
@@ -32,11 +33,12 @@ import { NamespacesModule } from 'src/namespaces/namespaces.module';
3233
AuthModule,
3334
UserModule,
3435
APIKeyModule,
35-
UserRoleModule,
3636
NamespacesModule,
3737
ResourcesModule,
3838
TasksModule,
3939
WizardModule,
40+
GroupsModule,
41+
PermissionsModule,
4042
// CacheModule.registerAsync({
4143
// imports: [ConfigModule],
4244
// inject: [ConfigService],
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Expose } from 'class-transformer';
2+
import { IsNotEmpty, IsString } from 'class-validator';
3+
4+
export class AddGroupUserDto {
5+
@IsString()
6+
@IsNotEmpty()
7+
@Expose({ name: 'user_id' })
8+
userId: string;
9+
}

src/groups/dto/create-group.dto.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { IsNotEmpty, IsString } from 'class-validator';
2+
3+
export class CreateGroupDto {
4+
@IsString()
5+
@IsNotEmpty()
6+
title: string;
7+
}

src/groups/dto/group-user.dto.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { IsNotEmpty, IsString } from 'class-validator';
2+
import { Expose } from 'class-transformer';
3+
4+
@Expose()
5+
export class GroupUserDto {
6+
@IsString()
7+
@IsNotEmpty()
8+
id: string;
9+
10+
@IsString()
11+
username: string;
12+
13+
@IsString()
14+
@IsNotEmpty()
15+
email: string;
16+
}

src/groups/dto/group.dto.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { IsNotEmpty, IsString } from 'class-validator';
2+
import { Expose } from 'class-transformer';
3+
4+
@Expose()
5+
export class GroupDto {
6+
@IsString()
7+
@IsNotEmpty()
8+
id: string;
9+
10+
@IsString()
11+
@IsNotEmpty()
12+
@Expose({ name: 'namespace_id' })
13+
namespaceId: string;
14+
15+
@IsString()
16+
title: string;
17+
}

src/groups/dto/update-group.dto.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { IsNotEmpty, IsString } from 'class-validator';
2+
3+
export class UpdateGroupDto {
4+
@IsString()
5+
@IsNotEmpty()
6+
title: string;
7+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { Base } from 'src/common/base.entity';
2+
import { User } from 'src/user/user.entity';
3+
import { Group } from './group.entity';
4+
import {
5+
Entity,
6+
PrimaryGeneratedColumn,
7+
ManyToOne,
8+
JoinColumn,
9+
Index,
10+
Column,
11+
} from 'typeorm';
12+
import { Namespace } from 'src/namespaces/entities/namespace.entity';
13+
14+
@Entity('group_users')
15+
@Index(['namespace', 'group', 'user'], {
16+
unique: true,
17+
where: 'deleted_at IS NULL',
18+
})
19+
export class GroupUser extends Base {
20+
@PrimaryGeneratedColumn()
21+
id: number;
22+
23+
@ManyToOne(() => Namespace, { nullable: false })
24+
@JoinColumn({ name: 'namespace_id' })
25+
namespace: Namespace;
26+
27+
@ManyToOne(() => Group, { nullable: false })
28+
@JoinColumn({ name: 'group_id' })
29+
group: Group;
30+
31+
@ManyToOne(() => User, { nullable: false })
32+
@JoinColumn({ name: 'user_id' })
33+
user: User;
34+
}

0 commit comments

Comments
 (0)