mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-07-16 10:46:17 +00:00
Add permission and role management features
This commit is contained in:
43
libs/common/src/constants/permissions-mapping.ts
Normal file
43
libs/common/src/constants/permissions-mapping.ts
Normal file
@ -0,0 +1,43 @@
|
||||
export const PermissionMapping = {
|
||||
DEVICE_MANAGEMENT: {
|
||||
DEVICE: ['SINGLE_CONTROL', 'VIEW', 'DELETE', 'UPDATE', 'BATCH_CONTROL'],
|
||||
FIRMWARE: ['CONTROL', 'VIEW'],
|
||||
},
|
||||
COMMUNITY_MANAGEMENT: {
|
||||
COMMUNITY: ['VIEW', 'ADD', 'UPDATE', 'DELETE'],
|
||||
},
|
||||
SPACE_MANAGEMENT: {
|
||||
SPACE: [
|
||||
'VIEW',
|
||||
'ADD',
|
||||
'UPDATE',
|
||||
'DELETE',
|
||||
'MODULE_ADD',
|
||||
'ASSIGN_USER_TO_SPACE',
|
||||
'DELETE_USER_FROM_SPACE',
|
||||
],
|
||||
SUBSPACE: [
|
||||
'VIEW',
|
||||
'ADD',
|
||||
'UPDATE',
|
||||
'DELETE',
|
||||
'ASSIGN_DEVICE_TO_SUBSPACE',
|
||||
'DELETE_DEVICE_FROM_SUBSPACE',
|
||||
],
|
||||
},
|
||||
DEVICE_WIZARD: {
|
||||
DEVICE_WIZARD: ['VIEW_DEVICE_WIZARD'],
|
||||
SPACE_DEVICE: ['VIEW_DEVICE_IN_SPACE', 'ASSIGN_DEVICE_TO_SPACE'],
|
||||
SUBSPACE_DEVICE: ['VIEW_DEVICE_IN_SUBSPACE', 'UPDATE_DEVICE_IN_SUBSPACE'],
|
||||
},
|
||||
AUTOMATION_MANAGEMENT: {
|
||||
AUTOMATION: ['VIEW', 'ADD', 'UPDATE', 'DELETE', 'CONTROL'],
|
||||
SCENES: ['VIEW', 'ADD', 'UPDATE', 'DELETE', 'CONTROL'],
|
||||
},
|
||||
VISITOR_PASSWORD_MANAGEMENT: {
|
||||
VISITOR_PASSWORD: ['VIEW', 'ADD', 'UPDATE', 'DELETE'],
|
||||
},
|
||||
USER_MANAGEMENT: {
|
||||
USER: ['ADD'],
|
||||
},
|
||||
};
|
130
libs/common/src/constants/role-permissions.ts
Normal file
130
libs/common/src/constants/role-permissions.ts
Normal file
@ -0,0 +1,130 @@
|
||||
import { RoleType } from './role.type.enum';
|
||||
|
||||
export const RolePermissions = {
|
||||
[RoleType.SUPER_ADMIN]: [
|
||||
'DEVICE_SINGLE_CONTROL',
|
||||
'DEVICE_VIEW',
|
||||
'DEVICE_DELETE',
|
||||
'DEVICE_UPDATE',
|
||||
'DEVICE_BATCH_CONTROL',
|
||||
'COMMUNITY_VIEW',
|
||||
'COMMUNITY_ADD',
|
||||
'COMMUNITY_UPDATE',
|
||||
'COMMUNITY_DELETE',
|
||||
'FIRMWARE_CONTROL',
|
||||
'SPACE_VIEW',
|
||||
'SPACE_ADD',
|
||||
'SPACE_UPDATE',
|
||||
'SPACE_DELETE',
|
||||
'SPACE_MODULE_ADD',
|
||||
'ASSIGN_USER_TO_SPACE',
|
||||
'DELETE_USER_FROM_SPACE',
|
||||
'SUBSPACE_VIEW',
|
||||
'SUBSPACE_ADD',
|
||||
'SUBSPACE_UPDATE',
|
||||
'SUBSPACE_DELETE',
|
||||
'ASSIGN_DEVICE_TO_SUBSPACE',
|
||||
'DELETE_DEVICE_FROM_SUBSPACE',
|
||||
'VIEW_DEVICE_WIZARD',
|
||||
'VIEW_DEVICE_IN_SUBSPACE',
|
||||
'VIEW_DEVICE_IN_SPACE',
|
||||
'UPDATE_DEVICE_IN_SUBSPACE',
|
||||
'ASSIGN_DEVICE_TO_SPACE',
|
||||
'AUTOMATION_VIEW',
|
||||
'AUTOMATION_ADD',
|
||||
'AUTOMATION_UPDATE',
|
||||
'AUTOMATION_DELETE',
|
||||
'AUTOMATION_CONTROL',
|
||||
'SCENES_VIEW',
|
||||
'SCENES_ADD',
|
||||
'SCENES_UPDATE',
|
||||
'SCENES_DELETE',
|
||||
'SCENES_CONTROL',
|
||||
'VISITOR_PASSWORD_VIEW',
|
||||
'VISITOR_PASSWORD_ADD',
|
||||
'USER_ADD',
|
||||
],
|
||||
[RoleType.ADMIN]: [
|
||||
'DEVICE_SINGLE_CONTROL',
|
||||
'DEVICE_VIEW',
|
||||
'DEVICE_DELETE',
|
||||
'DEVICE_UPDATE',
|
||||
'DEVICE_BATCH_CONTROL',
|
||||
'COMMUNITY_VIEW',
|
||||
'COMMUNITY_ADD',
|
||||
'COMMUNITY_UPDATE',
|
||||
'COMMUNITY_DELETE',
|
||||
'FIRMWARE_CONTROL',
|
||||
'SPACE_VIEW',
|
||||
'SPACE_ADD',
|
||||
'SPACE_UPDATE',
|
||||
'SPACE_DELETE',
|
||||
'SPACE_MODULE_ADD',
|
||||
'ASSIGN_USER_TO_SPACE',
|
||||
'DELETE_USER_FROM_SPACE',
|
||||
'SUBSPACE_VIEW',
|
||||
'SUBSPACE_ADD',
|
||||
'SUBSPACE_UPDATE',
|
||||
'SUBSPACE_DELETE',
|
||||
'ASSIGN_DEVICE_TO_SUBSPACE',
|
||||
'DELETE_DEVICE_FROM_SUBSPACE',
|
||||
'VIEW_DEVICE_WIZARD',
|
||||
'VIEW_DEVICE_IN_SUBSPACE',
|
||||
'VIEW_DEVICE_IN_SPACE',
|
||||
'UPDATE_DEVICE_IN_SUBSPACE',
|
||||
'ASSIGN_DEVICE_TO_SPACE',
|
||||
'AUTOMATION_VIEW',
|
||||
'AUTOMATION_ADD',
|
||||
'AUTOMATION_UPDATE',
|
||||
'AUTOMATION_DELETE',
|
||||
'AUTOMATION_CONTROL',
|
||||
'SCENES_VIEW',
|
||||
'SCENES_ADD',
|
||||
'SCENES_UPDATE',
|
||||
'SCENES_DELETE',
|
||||
'SCENES_CONTROL',
|
||||
'VISITOR_PASSWORD_VIEW',
|
||||
'VISITOR_PASSWORD_ADD',
|
||||
'USER_ADD',
|
||||
],
|
||||
[RoleType.SPACE_MEMBER]: [
|
||||
'DEVICE_SINGLE_CONTROL',
|
||||
'DEVICE_VIEW',
|
||||
'SPACE_VIEW',
|
||||
'SUBSPACE_VIEW',
|
||||
'VIEW_DEVICE_WIZARD',
|
||||
'VIEW_DEVICE_IN_SUBSPACE',
|
||||
'VIEW_DEVICE_IN_SPACE',
|
||||
'AUTOMATION_VIEW',
|
||||
'AUTOMATION_CONTROL',
|
||||
'SCENES_VIEW',
|
||||
'SCENES_CONTROL',
|
||||
'VISITOR_PASSWORD_VIEW',
|
||||
],
|
||||
[RoleType.SPACE_OWNER]: [
|
||||
'DEVICE_SINGLE_CONTROL',
|
||||
'DEVICE_VIEW',
|
||||
'FIRMWARE_CONTROL',
|
||||
'FIRMWARE_VIEW',
|
||||
'SPACE_VIEW',
|
||||
'SPACE_MEMBER_ADD',
|
||||
'SUBSPACE_VIEW',
|
||||
'SUBSPACE_ADD',
|
||||
'SUBSPACE_UPDATE',
|
||||
'SUBSPACE_DELETE',
|
||||
'AUTOMATION_VIEW',
|
||||
'AUTOMATION_ADD',
|
||||
'AUTOMATION_UPDATE',
|
||||
'AUTOMATION_DELETE',
|
||||
'AUTOMATION_CONTROL',
|
||||
'SCENES_VIEW',
|
||||
'SCENES_ADD',
|
||||
'SCENES_UPDATE',
|
||||
'SCENES_DELETE',
|
||||
'SCENES_CONTROL',
|
||||
'VISITOR_PASSWORD_VIEW',
|
||||
'VISITOR_PASSWORD_ADD',
|
||||
'VISITOR_PASSWORD_UPDATE',
|
||||
'VISITOR_PASSWORD_DELETE',
|
||||
],
|
||||
};
|
@ -15,7 +15,6 @@ import {
|
||||
} from '../modules/space/entities';
|
||||
import { UserSpaceEntity } from '../modules/user/entities';
|
||||
import { DeviceUserPermissionEntity } from '../modules/device/entities';
|
||||
import { UserRoleEntity } from '../modules/user/entities';
|
||||
import { RoleTypeEntity } from '../modules/role-type/entities';
|
||||
import { UserNotificationEntity } from '../modules/user/entities';
|
||||
import { DeviceNotificationEntity } from '../modules/device/entities';
|
||||
@ -34,6 +33,10 @@ import {
|
||||
SpaceProductModelEntity,
|
||||
SubspaceModelEntity,
|
||||
} from '../modules/space-model/entities';
|
||||
import {
|
||||
InviteUserEntity,
|
||||
InviteUserSpaceEntity,
|
||||
} from '../modules/Invite-user/entities';
|
||||
@Module({
|
||||
imports: [
|
||||
TypeOrmModule.forRootAsync({
|
||||
@ -63,7 +66,6 @@ import {
|
||||
SpaceProductEntity,
|
||||
UserSpaceEntity,
|
||||
DeviceUserPermissionEntity,
|
||||
UserRoleEntity,
|
||||
RoleTypeEntity,
|
||||
UserNotificationEntity,
|
||||
DeviceNotificationEntity,
|
||||
@ -78,6 +80,8 @@ import {
|
||||
SpaceProductModelEntity,
|
||||
SpaceProductItemModelEntity,
|
||||
SubspaceModelEntity,
|
||||
InviteUserEntity,
|
||||
InviteUserSpaceEntity,
|
||||
],
|
||||
namingStrategy: new SnakeNamingStrategy(),
|
||||
synchronize: Boolean(JSON.parse(configService.get('DB_SYNC'))),
|
||||
|
@ -3,6 +3,7 @@ import { AbstractEntity } from '../../abstract/entities/abstract.entity';
|
||||
import { ProjectDto } from '../dtos';
|
||||
import { CommunityEntity } from '../../community/entities';
|
||||
import { SpaceModelEntity } from '../../space-model';
|
||||
import { UserEntity } from '../../user/entities';
|
||||
|
||||
@Entity({ name: 'project' })
|
||||
@Unique(['name'])
|
||||
@ -28,6 +29,9 @@ export class ProjectEntity extends AbstractEntity<ProjectDto> {
|
||||
@OneToMany(() => CommunityEntity, (community) => community.project)
|
||||
communities: CommunityEntity[];
|
||||
|
||||
@OneToMany(() => UserEntity, (user) => user.project)
|
||||
public users: UserEntity[];
|
||||
|
||||
constructor(partial: Partial<ProjectEntity>) {
|
||||
super();
|
||||
Object.assign(this, partial);
|
||||
|
@ -2,7 +2,8 @@ import { Column, Entity, OneToMany, Unique } from 'typeorm';
|
||||
import { AbstractEntity } from '../../abstract/entities/abstract.entity';
|
||||
import { RoleTypeDto } from '../dtos/role.type.dto';
|
||||
import { RoleType } from '@app/common/constants/role.type.enum';
|
||||
import { UserRoleEntity } from '../../user/entities';
|
||||
import { UserEntity } from '../../user/entities';
|
||||
import { InviteUserEntity } from '../../Invite-user/entities';
|
||||
|
||||
@Entity({ name: 'role-type' })
|
||||
@Unique(['type'])
|
||||
@ -12,10 +13,14 @@ export class RoleTypeEntity extends AbstractEntity<RoleTypeDto> {
|
||||
enum: Object.values(RoleType),
|
||||
})
|
||||
type: string;
|
||||
@OneToMany(() => UserRoleEntity, (role) => role.roleType, {
|
||||
@OneToMany(() => UserEntity, (inviteUser) => inviteUser.roleType, {
|
||||
nullable: true,
|
||||
})
|
||||
roles: UserRoleEntity[];
|
||||
users: UserEntity[];
|
||||
@OneToMany(() => InviteUserEntity, (inviteUser) => inviteUser.roleType, {
|
||||
nullable: true,
|
||||
})
|
||||
invitedUsers: InviteUserEntity[];
|
||||
constructor(partial: Partial<RoleTypeEntity>) {
|
||||
super();
|
||||
Object.assign(this, partial);
|
||||
|
@ -4,7 +4,6 @@ import {
|
||||
UserEntity,
|
||||
UserNotificationEntity,
|
||||
UserOtpEntity,
|
||||
UserRoleEntity,
|
||||
UserSpaceEntity,
|
||||
} from './entities';
|
||||
|
||||
@ -17,7 +16,6 @@ import {
|
||||
UserEntity,
|
||||
UserNotificationEntity,
|
||||
UserOtpEntity,
|
||||
UserRoleEntity,
|
||||
UserSpaceEntity,
|
||||
]),
|
||||
],
|
||||
|
Reference in New Issue
Block a user