Add choral permissions

This commit is contained in:
2025-04-16 16:44:41 +02:00
parent d6d4bcfc33
commit 3cb23ef4b7
11 changed files with 186 additions and 12 deletions

View File

@@ -0,0 +1,33 @@
{
"kind": "collectionType",
"collectionName": "choral_permissions",
"info": {
"singularName": "choral-permission",
"pluralName": "choral-permissions",
"displayName": "ChoralPermission",
"description": ""
},
"options": {
"draftAndPublish": false
},
"pluginOptions": {},
"attributes": {
"choralName": {
"type": "string"
},
"choralId": {
"type": "integer"
},
"permissions": {
"type": "component",
"repeatable": true,
"component": "user.permissions"
},
"user": {
"type": "relation",
"relation": "manyToOne",
"target": "plugin::users-permissions.user",
"inversedBy": "choral_permissions"
}
}
}

View File

@@ -0,0 +1,7 @@
/**
* choral-permission controller
*/
import { factories } from '@strapi/strapi'
export default factories.createCoreController('api::choral-permission.choral-permission');

View File

@@ -0,0 +1,7 @@
/**
* choral-permission router
*/
import { factories } from '@strapi/strapi';
export default factories.createCoreRouter('api::choral-permission.choral-permission');

View File

@@ -0,0 +1,7 @@
/**
* choral-permission service
*/
import { factories } from '@strapi/strapi';
export default factories.createCoreService('api::choral-permission.choral-permission');

View File

@@ -71,7 +71,17 @@
"permissions_templates": { "permissions_templates": {
"type": "relation", "type": "relation",
"relation": "oneToMany", "relation": "oneToMany",
"target": "api::permissions-template.permissions-template" "target": "api::permissions-template.permissions-template",
"mappedBy": "choral"
},
"email": {
"type": "email"
},
"phoneNumber": {
"type": "string"
},
"website": {
"type": "string"
} }
} }
} }

View File

@@ -2,6 +2,36 @@
* choral controller * choral controller
*/ */
import { factories } from '@strapi/strapi' import { factories } from "@strapi/strapi";
export default factories.createCoreController('api::choral.choral'); export default factories.createCoreController(
"api::choral.choral",
({ strapi }) => ({
async create(ctx) {
const data = JSON.parse(ctx.request.body.data);
if (ctx.request.files.coverImage) {
const files = Array.isArray(ctx.request.files.coverImage)
? ctx.request.files.coverImage[0]
: ctx.request.files.coverImage;
const extension = files.originalFilename.match(/\.[0-9a-z]+$/i);
const payload = {
fileInfo: {
caption: "undefined",
alternativeText: data.name || "",
name: `${data.name}_cover${extension}`,
},
};
const asset = await strapi.services["plugin::upload.upload"].upload({
data: payload,
files,
});
data.cover = asset[0].id;
}
ctx.request.body = { data };
const result = await super.create(ctx);
return result;
},
})
);

View File

@@ -4,16 +4,14 @@
"info": { "info": {
"singularName": "permissions-template", "singularName": "permissions-template",
"pluralName": "permissions-templates", "pluralName": "permissions-templates",
"displayName": "PermissionsTemplate" "displayName": "PermissionsTemplate",
"description": ""
}, },
"options": { "options": {
"draftAndPublish": false "draftAndPublish": false
}, },
"pluginOptions": {}, "pluginOptions": {},
"attributes": { "attributes": {
"key": {
"type": "uid"
},
"title": { "title": {
"type": "string" "type": "string"
}, },
@@ -24,6 +22,12 @@
"type": "component", "type": "component",
"repeatable": true, "repeatable": true,
"component": "user.permissions" "component": "user.permissions"
},
"choral": {
"type": "relation",
"relation": "manyToOne",
"target": "api::choral.choral",
"inversedBy": "permissions_templates"
} }
} }
} }

View File

@@ -2,6 +2,15 @@
* permissions-template controller * permissions-template controller
*/ */
import { factories } from '@strapi/strapi' import { factories } from "@strapi/strapi";
export default factories.createCoreController('api::permissions-template.permissions-template'); export default factories.createCoreController(
"api::permissions-template.permissions-template",
({ strapi }) => ({
async create(ctx) {
console.log(ctx);
const { data, meta } = await super.create(ctx);
return { data, meta };
},
})
);

View File

@@ -163,6 +163,12 @@
}, },
"dob": { "dob": {
"type": "date" "type": "date"
},
"choral_permissions": {
"type": "relation",
"relation": "oneToMany",
"target": "api::choral-permission.choral-permission",
"mappedBy": "user"
} }
} }
} }

View File

@@ -1,4 +1,4 @@
// import type { Core } from '@strapi/strapi'; import type { Core } from "@strapi/strapi";
export default { export default {
/** /**
@@ -16,5 +16,21 @@ export default {
* This gives you an opportunity to set up your data model, * This gives you an opportunity to set up your data model,
* run jobs, or perform some special logic. * run jobs, or perform some special logic.
*/ */
bootstrap(/* { strapi }: { strapi: Core.Strapi } */) {}, bootstrap({ strapi }: { strapi: Core.Strapi }) {
strapi.db.lifecycles.subscribe({
models: ["plugin::users-permissions.user"], // Applies only to users in users-permissions
/**
* Lifecycle hook triggered after a new user is created.
* Ensures that a user profile is created with either the provided full name and bio
* or a default generated username and bio if missing.
* @param {any} event - The event object containing the created user's details.
*/
async afterCreate(event: any) {
const { result, params } = event;
console.log(result);
console.log(params);
},
});
},
}; };

View File

@@ -475,6 +475,42 @@ export interface ApiBoardBoard extends Struct.CollectionTypeSchema {
}; };
} }
export interface ApiChoralPermissionChoralPermission
extends Struct.CollectionTypeSchema {
collectionName: 'choral_permissions';
info: {
description: '';
displayName: 'ChoralPermission';
pluralName: 'choral-permissions';
singularName: 'choral-permission';
};
options: {
draftAndPublish: false;
};
attributes: {
choralId: Schema.Attribute.Integer;
choralName: Schema.Attribute.String;
createdAt: Schema.Attribute.DateTime;
createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
Schema.Attribute.Private;
locale: Schema.Attribute.String & Schema.Attribute.Private;
localizations: Schema.Attribute.Relation<
'oneToMany',
'api::choral-permission.choral-permission'
> &
Schema.Attribute.Private;
permissions: Schema.Attribute.Component<'user.permissions', true>;
publishedAt: Schema.Attribute.DateTime;
updatedAt: Schema.Attribute.DateTime;
updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
Schema.Attribute.Private;
user: Schema.Attribute.Relation<
'manyToOne',
'plugin::users-permissions.user'
>;
};
}
export interface ApiChoralChoral extends Struct.CollectionTypeSchema { export interface ApiChoralChoral extends Struct.CollectionTypeSchema {
collectionName: 'chorals'; collectionName: 'chorals';
info: { info: {
@@ -500,6 +536,7 @@ export interface ApiChoralChoral extends Struct.CollectionTypeSchema {
createdAt: Schema.Attribute.DateTime; createdAt: Schema.Attribute.DateTime;
createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
Schema.Attribute.Private; Schema.Attribute.Private;
email: Schema.Attribute.Email;
locale: Schema.Attribute.String & Schema.Attribute.Private; locale: Schema.Attribute.String & Schema.Attribute.Private;
localizations: Schema.Attribute.Relation< localizations: Schema.Attribute.Relation<
'oneToMany', 'oneToMany',
@@ -515,6 +552,7 @@ export interface ApiChoralChoral extends Struct.CollectionTypeSchema {
'oneToMany', 'oneToMany',
'api::permissions-template.permissions-template' 'api::permissions-template.permissions-template'
>; >;
phoneNumber: Schema.Attribute.String;
postal: Schema.Attribute.Integer; postal: Schema.Attribute.Integer;
publishedAt: Schema.Attribute.DateTime; publishedAt: Schema.Attribute.DateTime;
updatedAt: Schema.Attribute.DateTime; updatedAt: Schema.Attribute.DateTime;
@@ -524,6 +562,7 @@ export interface ApiChoralChoral extends Struct.CollectionTypeSchema {
'manyToMany', 'manyToMany',
'plugin::users-permissions.user' 'plugin::users-permissions.user'
>; >;
website: Schema.Attribute.String;
}; };
} }
@@ -561,6 +600,7 @@ export interface ApiPermissionsTemplatePermissionsTemplate
extends Struct.CollectionTypeSchema { extends Struct.CollectionTypeSchema {
collectionName: 'permissions_templates'; collectionName: 'permissions_templates';
info: { info: {
description: '';
displayName: 'PermissionsTemplate'; displayName: 'PermissionsTemplate';
pluralName: 'permissions-templates'; pluralName: 'permissions-templates';
singularName: 'permissions-template'; singularName: 'permissions-template';
@@ -569,11 +609,11 @@ export interface ApiPermissionsTemplatePermissionsTemplate
draftAndPublish: false; draftAndPublish: false;
}; };
attributes: { attributes: {
choral: Schema.Attribute.Relation<'manyToOne', 'api::choral.choral'>;
createdAt: Schema.Attribute.DateTime; createdAt: Schema.Attribute.DateTime;
createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
Schema.Attribute.Private; Schema.Attribute.Private;
description: Schema.Attribute.String; description: Schema.Attribute.String;
key: Schema.Attribute.UID;
locale: Schema.Attribute.String & Schema.Attribute.Private; locale: Schema.Attribute.String & Schema.Attribute.Private;
localizations: Schema.Attribute.Relation< localizations: Schema.Attribute.Relation<
'oneToMany', 'oneToMany',
@@ -1053,6 +1093,10 @@ export interface PluginUsersPermissionsUser
>; >;
blocked: Schema.Attribute.Boolean & Schema.Attribute.DefaultTo<false>; blocked: Schema.Attribute.Boolean & Schema.Attribute.DefaultTo<false>;
board: Schema.Attribute.Relation<'oneToOne', 'api::board.board'>; board: Schema.Attribute.Relation<'oneToOne', 'api::board.board'>;
choral_permissions: Schema.Attribute.Relation<
'oneToMany',
'api::choral-permission.choral-permission'
>;
choralAdmin: Schema.Attribute.Relation<'manyToMany', 'api::choral.choral'>; choralAdmin: Schema.Attribute.Relation<'manyToMany', 'api::choral.choral'>;
choralOwner: Schema.Attribute.Relation<'oneToOne', 'api::choral.choral'>; choralOwner: Schema.Attribute.Relation<'oneToOne', 'api::choral.choral'>;
chorals: Schema.Attribute.Relation<'manyToMany', 'api::choral.choral'>; chorals: Schema.Attribute.Relation<'manyToMany', 'api::choral.choral'>;
@@ -1123,6 +1167,7 @@ declare module '@strapi/strapi' {
'api::board-card.board-card': ApiBoardCardBoardCard; 'api::board-card.board-card': ApiBoardCardBoardCard;
'api::board-list.board-list': ApiBoardListBoardList; 'api::board-list.board-list': ApiBoardListBoardList;
'api::board.board': ApiBoardBoard; 'api::board.board': ApiBoardBoard;
'api::choral-permission.choral-permission': ApiChoralPermissionChoralPermission;
'api::choral.choral': ApiChoralChoral; 'api::choral.choral': ApiChoralChoral;
'api::event.event': ApiEventEvent; 'api::event.event': ApiEventEvent;
'api::permissions-template.permissions-template': ApiPermissionsTemplatePermissionsTemplate; 'api::permissions-template.permissions-template': ApiPermissionsTemplatePermissionsTemplate;