Skip to content

Commit

Permalink
fix document MA code validation for for admins, form permission is ad…
Browse files Browse the repository at this point in the history
…min check doesn't crash if form uses no permissions
  • Loading branch information
olzraiti committed Jan 15, 2025
1 parent 95150d0 commit 1caa2b0
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { NamedPlaceNotTooNearOtherPlacesValidatorService }
import { UniqueNamedPlaceAlternativeIDsValidatorService }
from "./validators/unique-named-place-alternativeIDs.validator.service";
import { ProfileModule } from "src/profile/profile.module";
import { FormPermissionsModule } from "src/forms/form-permissions/form-permissions.module";

@Module({
providers: [
Expand All @@ -27,7 +28,8 @@ import { ProfileModule } from "src/profile/profile.module";
TaxaModule,
forwardRef(() => DocumentsModule),
forwardRef(() => NamedPlacesModule),
ProfileModule
ProfileModule,
FormPermissionsModule
],
exports: [DocumentValidatorService]
})
Expand Down
11 changes: 9 additions & 2 deletions src/documents/document-validator/document-validator.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { UniqueNamedPlaceAlternativeIDsValidatorService }
import { dotNotationToJSONPointer } from "src/utils";
import { Person } from "src/persons/person.dto";
import { ProfileService } from "src/profile/profile.service";
import { FormPermissionsService } from "src/forms/form-permissions/form-permissions.service";

@Injectable()
export class DocumentValidatorService {
Expand All @@ -29,6 +30,7 @@ export class DocumentValidatorService {
private formsService: FormsService,
@Inject(forwardRef(() => NamedPlacesService)) private namedPlacesService: NamedPlacesService,
private profileService: ProfileService,
private formPermissionsService: FormPermissionsService,
// These following services are used even though TS doesn't know about it. They are called dynamically in
// `validateWithValidationStrategy()`.
private taxonBelongsToInformalTaxonGroupValidatorService: TaxonBelongsToInformalTaxonGroupValidatorService,
Expand Down Expand Up @@ -100,7 +102,12 @@ export class DocumentValidatorService {
}

private async validatePersonLinkings(document: Document, person: Person) {
const persons = [
const { collectionID } = document;
if (collectionID && await this.formPermissionsService.isAdminOf(collectionID, person)) {
return;
}

const personValidations = [
...(document.gatheringEvent?.leg || [])
.map((leg, i) => ({ personString: leg, path: `/document/gatheringEvent/${i}/leg` })),
...(document.editors || [])
Expand All @@ -109,7 +116,7 @@ export class DocumentValidatorService {

const { friends } = await this.profileService.getByPersonIdOrCreate(person.id);

for (const { personString, path } of persons) {
for (const { personString, path } of personValidations) {
if (personString.toUpperCase().startsWith("MA.") && ![person.id, ...friends].includes(personString)) {
throw new ValidationException({ [path]: ["MA codes must be yourself or your friend!"] });
}
Expand Down
5 changes: 4 additions & 1 deletion src/forms/form-permissions/form-permissions.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,10 @@ export class FormPermissionsService {
}

async isAdminOf(collectionID: string, person: Person) {
const permissions = await this.getByCollectionIDAndPerson(collectionID, person);
const permissions = await this.findByCollectionIDAndPerson(collectionID, person);
if (!permissions) {
return false;
}
return isAdminOf(permissions, person);
}

Expand Down

0 comments on commit 1caa2b0

Please sign in to comment.