refactor(server): access checks (#2776)

* refactor(server): access checks

* chore: simply asset module
This commit is contained in:
Jason Rasmussen
2023-06-16 15:01:34 -04:00
committed by GitHub
parent 61d74263d9
commit f04e47803c
11 changed files with 132 additions and 99 deletions

View File

@@ -1,10 +1,12 @@
import { IAccessRepository } from '@app/domain';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { PartnerEntity, SharedLinkEntity } from '../entities';
import { AlbumEntity, AssetEntity, PartnerEntity, SharedLinkEntity } from '../entities';
export class AccessRepository implements IAccessRepository {
constructor(
@InjectRepository(AssetEntity) private assetRepository: Repository<AssetEntity>,
@InjectRepository(AlbumEntity) private albumRepository: Repository<AlbumEntity>,
@InjectRepository(PartnerEntity) private partnerRepository: Repository<PartnerEntity>,
@InjectRepository(SharedLinkEntity) private sharedLinkRepository: Repository<SharedLinkEntity>,
) {}
@@ -18,6 +20,36 @@ export class AccessRepository implements IAccessRepository {
});
}
hasAlbumAssetAccess(userId: string, assetId: string): Promise<boolean> {
return this.albumRepository.exist({
where: [
{
ownerId: userId,
assets: {
id: assetId,
},
},
{
sharedUsers: {
id: userId,
},
assets: {
id: assetId,
},
},
],
});
}
hasOwnerAssetAccess(userId: string, assetId: string): Promise<boolean> {
return this.assetRepository.exist({
where: {
id: assetId,
ownerId: userId,
},
});
}
hasPartnerAssetAccess(userId: string, assetId: string): Promise<boolean> {
return this.partnerRepository.exist({
where: {

View File

@@ -124,8 +124,8 @@ export class AlbumRepository implements IAlbumRepository {
});
}
async hasAsset(id: string, assetId: string): Promise<boolean> {
const count = await this.repository.count({
hasAsset(id: string, assetId: string): Promise<boolean> {
return this.repository.exist({
where: {
id,
assets: {
@@ -136,8 +136,6 @@ export class AlbumRepository implements IAlbumRepository {
assets: true,
},
});
return Boolean(count);
}
async create(album: Partial<AlbumEntity>): Promise<AlbumEntity> {