From 535655b12f1aabe8c47fdd97536623c7059a2318 Mon Sep 17 00:00:00 2001 From: NicoleNG18 Date: Fri, 21 Mar 2025 10:35:10 +0200 Subject: [PATCH 1/4] refactor module: - add roles to entities - add roles to navigations --- codbex-methods/codbex-methods.edm | 6 +++--- codbex-methods/codbex-methods.gen | 21 ++++++++++++++++--- codbex-methods/codbex-methods.model | 8 +++++-- .../api/PaymentMethod/PaymentMethodService.ts | 19 +++++++++++++++++ .../api/SentMethod/SentMethodService.ts | 19 +++++++++++++++++ codbex-methods/gen/codbex-methods/index.html | 2 +- .../codbex-methods/roles/default-roles.roles | 16 ++++++++++++++ .../dialog-filter/view.extension | 5 +++-- .../dialog-window/view.extension | 5 +++-- .../PaymentMethod/tile-portal.extension | 3 ++- .../PaymentMethod/tile.extension | 3 ++- .../PaymentMethod/view.extension | 3 ++- .../ui/PaymentMethod/perspective.js | 4 ++-- .../SentMethod/dialog-filter/view.extension | 5 +++-- .../SentMethod/dialog-window/view.extension | 5 +++-- .../SentMethod/tile-portal.extension | 3 ++- .../ui/SentMethod/SentMethod/tile.extension | 3 ++- .../ui/SentMethod/SentMethod/view.extension | 3 ++- .../ui/SentMethod/perspective.js | 4 ++-- .../ui/launchpad/dialog-window.extensionpoint | 2 +- .../payment-method/navigation.extension | 3 ++- .../sent-method/navigation.extension | 3 ++- 22 files changed, 115 insertions(+), 30 deletions(-) diff --git a/codbex-methods/codbex-methods.edm b/codbex-methods/codbex-methods.edm index fd41c2f..3d839ef 100644 --- a/codbex-methods/codbex-methods.edm +++ b/codbex-methods/codbex-methods.edm @@ -1,10 +1,10 @@ - + - + @@ -15,5 +15,5 @@ - + \ No newline at end of file diff --git a/codbex-methods/codbex-methods.gen b/codbex-methods/codbex-methods.gen index e9cecbd..36c0917 100644 --- a/codbex-methods/codbex-methods.gen +++ b/codbex-methods/codbex-methods.gen @@ -7,7 +7,18 @@ "dataSource": "DefaultDB", "fileName": "codbex-methods", "genFolderName": "codbex-methods", - "roles": [], + "roles": [ + { + "entityName": "PaymentMethod", + "roleRead": "codbex-methods.PaymentMethod.PaymentMethodReadOnly", + "roleWrite": "codbex-methods.PaymentMethod.PaymentMethodFullAccess" + }, + { + "entityName": "SentMethod", + "roleRead": "codbex-methods.SentMethod.SentMethodReadOnly", + "roleWrite": "codbex-methods.SentMethod.SentMethodFullAccess" + } + ], "projectName": "codbex-methods", "workspaceName": "workspace", "filePath": "codbex-methods.model", @@ -92,7 +103,7 @@ "dataName": "PAYMENTMETHOD", "dataQuery": "", "description": "Manage entity PaymentMethod", - "generateDefaultRoles": "false", + "generateDefaultRoles": "true", "generateReport": "false", "icon": "/services/web/resources/unicons/file.svg", "layoutType": "MANAGE", @@ -106,6 +117,8 @@ "perspectiveName": "PaymentMethod", "perspectiveOrder": "100", "perspectiveRole": "", + "roleRead": "codbex-methods.PaymentMethod.PaymentMethodReadOnly", + "roleWrite": "codbex-methods.PaymentMethod.PaymentMethodFullAccess", "title": "PaymentMethod", "tooltip": "PaymentMethod", "type": "SETTING", @@ -173,7 +186,7 @@ "dataName": "SENTMETHOD", "dataQuery": "", "description": "Manage entity SentMethod", - "generateDefaultRoles": "false", + "generateDefaultRoles": "true", "generateReport": "false", "icon": "/services/web/resources/unicons/file.svg", "layoutType": "MANAGE", @@ -187,6 +200,8 @@ "perspectiveName": "SentMethod", "perspectiveOrder": "200", "perspectiveRole": "", + "roleRead": "codbex-methods.SentMethod.SentMethodReadOnly", + "roleWrite": "codbex-methods.SentMethod.SentMethodFullAccess", "title": "SentMethod", "tooltip": "SentMethod", "type": "SETTING", diff --git a/codbex-methods/codbex-methods.model b/codbex-methods/codbex-methods.model index e170d1c..0fed3b6 100644 --- a/codbex-methods/codbex-methods.model +++ b/codbex-methods/codbex-methods.model @@ -36,7 +36,7 @@ "dataName": "PAYMENTMETHOD", "dataQuery": "", "description": "Manage entity PaymentMethod", - "generateDefaultRoles": "false", + "generateDefaultRoles": "true", "generateReport": "false", "icon": "/services/web/resources/unicons/file.svg", "layoutType": "MANAGE", @@ -50,6 +50,8 @@ "perspectiveName": "PaymentMethod", "perspectiveOrder": "100", "perspectiveRole": "", + "roleRead": "codbex-methods.PaymentMethod.PaymentMethodReadOnly", + "roleWrite": "codbex-methods.PaymentMethod.PaymentMethodFullAccess", "title": "PaymentMethod", "tooltip": "PaymentMethod", "type": "SETTING" @@ -89,7 +91,7 @@ "dataName": "SENTMETHOD", "dataQuery": "", "description": "Manage entity SentMethod", - "generateDefaultRoles": "false", + "generateDefaultRoles": "true", "generateReport": "false", "icon": "/services/web/resources/unicons/file.svg", "layoutType": "MANAGE", @@ -103,6 +105,8 @@ "perspectiveName": "SentMethod", "perspectiveOrder": "200", "perspectiveRole": "", + "roleRead": "codbex-methods.SentMethod.SentMethodReadOnly", + "roleWrite": "codbex-methods.SentMethod.SentMethodFullAccess", "title": "SentMethod", "tooltip": "SentMethod", "type": "SETTING" diff --git a/codbex-methods/gen/codbex-methods/api/PaymentMethod/PaymentMethodService.ts b/codbex-methods/gen/codbex-methods/api/PaymentMethod/PaymentMethodService.ts index ce22952..fb82494 100644 --- a/codbex-methods/gen/codbex-methods/api/PaymentMethod/PaymentMethodService.ts +++ b/codbex-methods/gen/codbex-methods/api/PaymentMethod/PaymentMethodService.ts @@ -1,6 +1,8 @@ import { Controller, Get, Post, Put, Delete, response } from "sdk/http" import { Extensions } from "sdk/extensions" import { PaymentMethodRepository, PaymentMethodEntityOptions } from "../../dao/PaymentMethod/PaymentMethodRepository"; +import { user } from "sdk/security" +import { ForbiddenError } from "../utils/ForbiddenError"; import { ValidationError } from "../utils/ValidationError"; import { HttpUtils } from "../utils/HttpUtils"; @@ -14,6 +16,7 @@ class PaymentMethodService { @Get("/") public getAll(_: any, ctx: any) { try { + this.checkPermissions("read"); const options: PaymentMethodEntityOptions = { $limit: ctx.queryParameters["$limit"] ? parseInt(ctx.queryParameters["$limit"]) : undefined, $offset: ctx.queryParameters["$offset"] ? parseInt(ctx.queryParameters["$offset"]) : undefined @@ -28,6 +31,7 @@ class PaymentMethodService { @Post("/") public create(entity: any) { try { + this.checkPermissions("write"); this.validateEntity(entity); entity.Id = this.repository.create(entity); response.setHeader("Content-Location", "/services/ts/codbex-methods/gen/codbex-methods/api/PaymentMethod/PaymentMethodService.ts/" + entity.Id); @@ -41,6 +45,7 @@ class PaymentMethodService { @Get("/count") public count() { try { + this.checkPermissions("read"); return this.repository.count(); } catch (error: any) { this.handleError(error); @@ -50,6 +55,7 @@ class PaymentMethodService { @Post("/count") public countWithFilter(filter: any) { try { + this.checkPermissions("read"); return this.repository.count(filter); } catch (error: any) { this.handleError(error); @@ -59,6 +65,7 @@ class PaymentMethodService { @Post("/search") public search(filter: any) { try { + this.checkPermissions("read"); return this.repository.findAll(filter); } catch (error: any) { this.handleError(error); @@ -68,6 +75,7 @@ class PaymentMethodService { @Get("/:id") public getById(_: any, ctx: any) { try { + this.checkPermissions("read"); const id = parseInt(ctx.pathParameters.id); const entity = this.repository.findById(id); if (entity) { @@ -83,6 +91,7 @@ class PaymentMethodService { @Put("/:id") public update(entity: any, ctx: any) { try { + this.checkPermissions("write"); entity.Id = ctx.pathParameters.id; this.validateEntity(entity); this.repository.update(entity); @@ -95,6 +104,7 @@ class PaymentMethodService { @Delete("/:id") public deleteById(_: any, ctx: any) { try { + this.checkPermissions("write"); const id = ctx.pathParameters.id; const entity = this.repository.findById(id); if (entity) { @@ -118,6 +128,15 @@ class PaymentMethodService { } } + private checkPermissions(operationType: string) { + if (operationType === "read" && !(user.isInRole("codbex-methods.PaymentMethod.PaymentMethodReadOnly") || user.isInRole("codbex-methods.PaymentMethod.PaymentMethodFullAccess"))) { + throw new ForbiddenError(); + } + if (operationType === "write" && !user.isInRole("codbex-methods.PaymentMethod.PaymentMethodFullAccess")) { + throw new ForbiddenError(); + } + } + private validateEntity(entity: any): void { if (entity.Name?.length > 20) { throw new ValidationError(`The 'Name' exceeds the maximum length of [20] characters`); diff --git a/codbex-methods/gen/codbex-methods/api/SentMethod/SentMethodService.ts b/codbex-methods/gen/codbex-methods/api/SentMethod/SentMethodService.ts index f3df4ae..acb018a 100644 --- a/codbex-methods/gen/codbex-methods/api/SentMethod/SentMethodService.ts +++ b/codbex-methods/gen/codbex-methods/api/SentMethod/SentMethodService.ts @@ -1,6 +1,8 @@ import { Controller, Get, Post, Put, Delete, response } from "sdk/http" import { Extensions } from "sdk/extensions" import { SentMethodRepository, SentMethodEntityOptions } from "../../dao/SentMethod/SentMethodRepository"; +import { user } from "sdk/security" +import { ForbiddenError } from "../utils/ForbiddenError"; import { ValidationError } from "../utils/ValidationError"; import { HttpUtils } from "../utils/HttpUtils"; @@ -14,6 +16,7 @@ class SentMethodService { @Get("/") public getAll(_: any, ctx: any) { try { + this.checkPermissions("read"); const options: SentMethodEntityOptions = { $limit: ctx.queryParameters["$limit"] ? parseInt(ctx.queryParameters["$limit"]) : undefined, $offset: ctx.queryParameters["$offset"] ? parseInt(ctx.queryParameters["$offset"]) : undefined @@ -28,6 +31,7 @@ class SentMethodService { @Post("/") public create(entity: any) { try { + this.checkPermissions("write"); this.validateEntity(entity); entity.Id = this.repository.create(entity); response.setHeader("Content-Location", "/services/ts/codbex-methods/gen/codbex-methods/api/SentMethod/SentMethodService.ts/" + entity.Id); @@ -41,6 +45,7 @@ class SentMethodService { @Get("/count") public count() { try { + this.checkPermissions("read"); return this.repository.count(); } catch (error: any) { this.handleError(error); @@ -50,6 +55,7 @@ class SentMethodService { @Post("/count") public countWithFilter(filter: any) { try { + this.checkPermissions("read"); return this.repository.count(filter); } catch (error: any) { this.handleError(error); @@ -59,6 +65,7 @@ class SentMethodService { @Post("/search") public search(filter: any) { try { + this.checkPermissions("read"); return this.repository.findAll(filter); } catch (error: any) { this.handleError(error); @@ -68,6 +75,7 @@ class SentMethodService { @Get("/:id") public getById(_: any, ctx: any) { try { + this.checkPermissions("read"); const id = parseInt(ctx.pathParameters.id); const entity = this.repository.findById(id); if (entity) { @@ -83,6 +91,7 @@ class SentMethodService { @Put("/:id") public update(entity: any, ctx: any) { try { + this.checkPermissions("write"); entity.Id = ctx.pathParameters.id; this.validateEntity(entity); this.repository.update(entity); @@ -95,6 +104,7 @@ class SentMethodService { @Delete("/:id") public deleteById(_: any, ctx: any) { try { + this.checkPermissions("write"); const id = ctx.pathParameters.id; const entity = this.repository.findById(id); if (entity) { @@ -118,6 +128,15 @@ class SentMethodService { } } + private checkPermissions(operationType: string) { + if (operationType === "read" && !(user.isInRole("codbex-methods.SentMethod.SentMethodReadOnly") || user.isInRole("codbex-methods.SentMethod.SentMethodFullAccess"))) { + throw new ForbiddenError(); + } + if (operationType === "write" && !user.isInRole("codbex-methods.SentMethod.SentMethodFullAccess")) { + throw new ForbiddenError(); + } + } + private validateEntity(entity: any): void { if (entity.Name?.length > 20) { throw new ValidationError(`The 'Name' exceeds the maximum length of [20] characters`); diff --git a/codbex-methods/gen/codbex-methods/index.html b/codbex-methods/gen/codbex-methods/index.html index 46abb36..5e68abc 100644 --- a/codbex-methods/gen/codbex-methods/index.html +++ b/codbex-methods/gen/codbex-methods/index.html @@ -49,7 +49,7 @@ .constant('extensionPoint', { perspectives: "codbex-methods", views: "codbex-methods-view", - dialogWindows: "codbex-methods-dialog-window" + dialogWindows: "dialog-window" }) .config(["messageHubProvider", function (messageHubProvider) { messageHubProvider.eventIdPrefix = 'codbex-methods.launchpad.Home'; diff --git a/codbex-methods/gen/codbex-methods/roles/default-roles.roles b/codbex-methods/gen/codbex-methods/roles/default-roles.roles index 32960f8..795598b 100644 --- a/codbex-methods/gen/codbex-methods/roles/default-roles.roles +++ b/codbex-methods/gen/codbex-methods/roles/default-roles.roles @@ -1,2 +1,18 @@ [ + { + "name": "codbex-methods.PaymentMethod.PaymentMethodReadOnly", + "description": "A role that grants read only permission for PaymentMethod." + }, + { + "name": "codbex-methods.PaymentMethod.PaymentMethodFullAccess", + "description": "A role that grants full access for PaymentMethod." + }, + { + "name": "codbex-methods.SentMethod.SentMethodReadOnly", + "description": "A role that grants read only permission for SentMethod." + }, + { + "name": "codbex-methods.SentMethod.SentMethodFullAccess", + "description": "A role that grants full access for SentMethod." + } ] \ No newline at end of file diff --git a/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/dialog-filter/view.extension b/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/dialog-filter/view.extension index 5fed98c..89347f4 100644 --- a/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/dialog-filter/view.extension +++ b/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/dialog-filter/view.extension @@ -1,5 +1,6 @@ { "module": "codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/dialog-filter/view.js", - "extensionPoint": "codbex-methods-dialog-window", - "description": "codbex-methods - Application Dialog Window" + "extensionPoint": "dialog-window", + "description": "codbex-methods - Application Dialog Window", + "role": "codbex-methods.PaymentMethod.PaymentMethodReadOnly,codbex-methods.PaymentMethod.PaymentMethodFullAccess" } \ No newline at end of file diff --git a/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/dialog-window/view.extension b/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/dialog-window/view.extension index 324ee28..b649633 100644 --- a/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/dialog-window/view.extension +++ b/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/dialog-window/view.extension @@ -1,5 +1,6 @@ { "module": "codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/dialog-window/view.js", - "extensionPoint": "codbex-methods-dialog-window", - "description": "codbex-methods - Application Dialog Window" + "extensionPoint": "dialog-window", + "description": "codbex-methods - Application Dialog Window", + "role": "codbex-methods.PaymentMethod.PaymentMethodReadOnly,codbex-methods.PaymentMethod.PaymentMethodFullAccess" } \ No newline at end of file diff --git a/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/tile-portal.extension b/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/tile-portal.extension index e13a7a1..624aac2 100644 --- a/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/tile-portal.extension +++ b/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/tile-portal.extension @@ -1,5 +1,6 @@ { "module": "codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/tile.js", "extensionPoint": "portal-tile", - "description": "codbex-methods - Application Tile" + "description": "codbex-methods - Application Tile", + "role": "codbex-methods.PaymentMethod.PaymentMethodReadOnly,codbex-methods.PaymentMethod.PaymentMethodFullAccess" } \ No newline at end of file diff --git a/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/tile.extension b/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/tile.extension index f422298..6044636 100644 --- a/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/tile.extension +++ b/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/tile.extension @@ -1,5 +1,6 @@ { "module": "codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/tile.js", "extensionPoint": "codbex-methods-tile", - "description": "codbex-methods - Application Tile" + "description": "codbex-methods - Application Tile", + "role": "codbex-methods.PaymentMethod.PaymentMethodReadOnly,codbex-methods.PaymentMethod.PaymentMethodFullAccess" } \ No newline at end of file diff --git a/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/view.extension b/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/view.extension index c10a250..54ab31c 100644 --- a/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/view.extension +++ b/codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/view.extension @@ -1,5 +1,6 @@ { "module": "codbex-methods/gen/codbex-methods/ui/PaymentMethod/PaymentMethod/view.js", "extensionPoint": "codbex-methods-view", - "description": "codbex-methods - Application View" + "description": "codbex-methods - Application View", + "role": "codbex-methods.PaymentMethod.PaymentMethodReadOnly,codbex-methods.PaymentMethod.PaymentMethodFullAccess" } \ No newline at end of file diff --git a/codbex-methods/gen/codbex-methods/ui/PaymentMethod/perspective.js b/codbex-methods/gen/codbex-methods/ui/PaymentMethod/perspective.js index 619003d..fab8db8 100644 --- a/codbex-methods/gen/codbex-methods/ui/PaymentMethod/perspective.js +++ b/codbex-methods/gen/codbex-methods/ui/PaymentMethod/perspective.js @@ -7,8 +7,8 @@ const perspectiveData = { id: 'PaymentMethod', name: 'PaymentMethod', link: '/services/web/codbex-methods/gen/codbex-methods/ui/PaymentMethod/index.html', - order: 100, - icon: '/services/web/resources/unicons/archive.svg', + order: '100', + icon: '/services/web/resources/unicons/archive.svg' }; if (typeof exports !== 'undefined') { diff --git a/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/dialog-filter/view.extension b/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/dialog-filter/view.extension index afd1d1d..2ae319a 100644 --- a/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/dialog-filter/view.extension +++ b/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/dialog-filter/view.extension @@ -1,5 +1,6 @@ { "module": "codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/dialog-filter/view.js", - "extensionPoint": "codbex-methods-dialog-window", - "description": "codbex-methods - Application Dialog Window" + "extensionPoint": "dialog-window", + "description": "codbex-methods - Application Dialog Window", + "role": "codbex-methods.SentMethod.SentMethodReadOnly,codbex-methods.SentMethod.SentMethodFullAccess" } \ No newline at end of file diff --git a/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/dialog-window/view.extension b/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/dialog-window/view.extension index e0208c5..876e69f 100644 --- a/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/dialog-window/view.extension +++ b/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/dialog-window/view.extension @@ -1,5 +1,6 @@ { "module": "codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/dialog-window/view.js", - "extensionPoint": "codbex-methods-dialog-window", - "description": "codbex-methods - Application Dialog Window" + "extensionPoint": "dialog-window", + "description": "codbex-methods - Application Dialog Window", + "role": "codbex-methods.SentMethod.SentMethodReadOnly,codbex-methods.SentMethod.SentMethodFullAccess" } \ No newline at end of file diff --git a/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/tile-portal.extension b/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/tile-portal.extension index b997c12..deb3f30 100644 --- a/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/tile-portal.extension +++ b/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/tile-portal.extension @@ -1,5 +1,6 @@ { "module": "codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/tile.js", "extensionPoint": "portal-tile", - "description": "codbex-methods - Application Tile" + "description": "codbex-methods - Application Tile", + "role": "codbex-methods.SentMethod.SentMethodReadOnly,codbex-methods.SentMethod.SentMethodFullAccess" } \ No newline at end of file diff --git a/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/tile.extension b/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/tile.extension index 5fc0de8..96c4596 100644 --- a/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/tile.extension +++ b/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/tile.extension @@ -1,5 +1,6 @@ { "module": "codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/tile.js", "extensionPoint": "codbex-methods-tile", - "description": "codbex-methods - Application Tile" + "description": "codbex-methods - Application Tile", + "role": "codbex-methods.SentMethod.SentMethodReadOnly,codbex-methods.SentMethod.SentMethodFullAccess" } \ No newline at end of file diff --git a/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/view.extension b/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/view.extension index 65f4d27..7adde32 100644 --- a/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/view.extension +++ b/codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/view.extension @@ -1,5 +1,6 @@ { "module": "codbex-methods/gen/codbex-methods/ui/SentMethod/SentMethod/view.js", "extensionPoint": "codbex-methods-view", - "description": "codbex-methods - Application View" + "description": "codbex-methods - Application View", + "role": "codbex-methods.SentMethod.SentMethodReadOnly,codbex-methods.SentMethod.SentMethodFullAccess" } \ No newline at end of file diff --git a/codbex-methods/gen/codbex-methods/ui/SentMethod/perspective.js b/codbex-methods/gen/codbex-methods/ui/SentMethod/perspective.js index 632d361..d13af93 100644 --- a/codbex-methods/gen/codbex-methods/ui/SentMethod/perspective.js +++ b/codbex-methods/gen/codbex-methods/ui/SentMethod/perspective.js @@ -7,8 +7,8 @@ const perspectiveData = { id: 'SentMethod', name: 'SentMethod', link: '/services/web/codbex-methods/gen/codbex-methods/ui/SentMethod/index.html', - order: 200, - icon: '/services/web/resources/unicons/archive.svg', + order: '200', + icon: '/services/web/resources/unicons/archive.svg' }; if (typeof exports !== 'undefined') { diff --git a/codbex-methods/gen/codbex-methods/ui/launchpad/dialog-window.extensionpoint b/codbex-methods/gen/codbex-methods/ui/launchpad/dialog-window.extensionpoint index 5c543e5..c4bd708 100644 --- a/codbex-methods/gen/codbex-methods/ui/launchpad/dialog-window.extensionpoint +++ b/codbex-methods/gen/codbex-methods/ui/launchpad/dialog-window.extensionpoint @@ -1,4 +1,4 @@ { - "name": "codbex-methods-dialog-window", + "name": "dialog-window", "description": "codbex-methods - Extension Point for the Application Dialog Window Providers" } \ No newline at end of file diff --git a/codbex-methods/navigations/payment-method/navigation.extension b/codbex-methods/navigations/payment-method/navigation.extension index c54274c..409fe51 100644 --- a/codbex-methods/navigations/payment-method/navigation.extension +++ b/codbex-methods/navigations/payment-method/navigation.extension @@ -1,5 +1,6 @@ { "extensionPoint": "dashboard-navigations", "module": "codbex-methods/navigations/payment-method/service.js", - "description": "Payment Method Navigation" + "description": "Payment Method Navigation", + "role": "codbex-methods.PaymentMethod.PaymentMethodReadOnly,codbex-methods.PaymentMethod.PaymentMethodFullAccess" } \ No newline at end of file diff --git a/codbex-methods/navigations/sent-method/navigation.extension b/codbex-methods/navigations/sent-method/navigation.extension index 9999333..5df91dc 100644 --- a/codbex-methods/navigations/sent-method/navigation.extension +++ b/codbex-methods/navigations/sent-method/navigation.extension @@ -1,5 +1,6 @@ { "extensionPoint": "dashboard-navigations", "module": "codbex-methods/navigations/sent-method/service.js", - "description": "Sent Method Navigation" + "description": "Sent Method Navigation", + "role": "codbex-methods.SentMethod.SentMethodFullAccess,codbex-methods.SentMethod.SentMethodReadOnly" } \ No newline at end of file From 8380e8f7b48fd610e530aeedcc23bc4af2fdf550 Mon Sep 17 00:00:00 2001 From: Nikol Georgieva Date: Fri, 21 Mar 2025 10:41:25 +0200 Subject: [PATCH 2/4] Update README.md --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 72fa13c..1cb966c 100644 --- a/README.md +++ b/README.md @@ -1 +1,7 @@ -# codbex-methods \ No newline at end of file +# codbex-methods + +Mathods Management Application + +### Model + +![model](images/methods-model.png) From c7fb0bd150f9716a546b15042b43cf1f984f3e30 Mon Sep 17 00:00:00 2001 From: Nikol Georgieva Date: Fri, 21 Mar 2025 10:42:55 +0200 Subject: [PATCH 3/4] add image --- images/methods-model.png | Bin 0 -> 27332 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/methods-model.png diff --git a/images/methods-model.png b/images/methods-model.png new file mode 100644 index 0000000000000000000000000000000000000000..5701fe7d2797c1f188a94ffab88185887bead88e GIT binary patch literal 27332 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 ICbu8|51ee=G5`Po literal 0 HcmV?d00001 From 7ce53dc6679043347aaa47733e0f80d5bee14243 Mon Sep 17 00:00:00 2001 From: Nikol Georgieva Date: Fri, 21 Mar 2025 10:43:25 +0200 Subject: [PATCH 4/4] fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1cb966c..b16f5c7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # codbex-methods -Mathods Management Application +Methods Management Application ### Model