add permissions to see the model.

This commit is contained in:
Simon Larsen
2023-09-20 16:08:17 +01:00
parent a09842c8b0
commit 03386eeba0
7 changed files with 37 additions and 3 deletions

View File

@@ -229,6 +229,8 @@ export default class ServiceHandler {
DashboardApiRoute.toString() +
currentResource.model.crudApiPath?.toString();
pageData.isMasterAdminApiDocs = currentResource.model.isMasterAdminApiDocs;
return res.render('pages/index', {
page: page,
resources: Resources,

View File

@@ -2,6 +2,7 @@ import BaseModel from 'Common/Models/BaseModel';
import Models from 'Model/Models/Index';
import ArrayUtil from 'Common/Types/ArrayUtil';
import Dictionary from 'Common/Types/Dictionary';
import { IsBillingEnabled } from 'CommonServer/EnvironmentConfig';
export interface ModelDocumentation {
name: string;
@@ -15,7 +16,13 @@ export default class ResourceUtil {
const resources: Array<ModelDocumentation> = Models.filter(
(model: typeof BaseModel) => {
const modelInstance: BaseModel = new model();
return modelInstance.enableDocumentation;
let showDocs: boolean = modelInstance.enableDocumentation;
if (modelInstance.isMasterAdminApiDocs && IsBillingEnabled) {
showDocs = false;
}
return showDocs;
}
)
.map((model: typeof BaseModel) => {

View File

@@ -9,8 +9,12 @@
<h2>Permissions</h2>
<% if(!pageData.isMasterAdminApiDocs){ %>
<p class="lead"> Your API Token needs permissions to create, update, read or delete this resource. If you do not have permissions to make a request a <code class="inline-code">4xx</code> status will be sent as response. </p>
<h3 id="consuming-webhooks" >
Read Permissions
@@ -138,6 +142,12 @@
</div>
<% } %>
<% if(pageData.isMasterAdminApiDocs){ %>
<p>This API can only be accessed through a Master API Token. You can create one on the Admin Dashboard.</p>
<% } %>
<h2 id="the-contact-model" class="scroll-mt-24">
The <%= pageData.title -%> model

View File

@@ -110,6 +110,7 @@ export default class BaseModel extends BaseEntity {
public enableWorkflowOn!: EnableWorkflowOn;
public enableDocumentation!: boolean;
public isMasterAdminApiDocs!: boolean;
public currentUserCanAccessColumnBy!: string | null;
public labelsColumn!: string | null;

View File

@@ -1,5 +1,10 @@
export default () => {
export interface EnableDocumentationProps {
isMasterAdminApiDocs?: boolean | undefined;
}
export default (props?: EnableDocumentationProps | undefined) => {
return (ctr: Function) => {
ctr.prototype.enableDocumentation = true;
ctr.prototype.isMasterAdminApiDocs = props?.isMasterAdminApiDocs || false;
};
};

View File

@@ -25,7 +25,12 @@ import Email from 'Common/Types/Email';
import Name from 'Common/Types/Name';
import Reseller from './Reseller';
import ResellerPlan from './ResellerPlan';
import EnableDocumentation from 'Common/Types/Model/EnableDocumentation';
@EnableDocumentation({
isMasterAdminApiDocs: true
})
@AllowAccessIfSubscriptionIsUnpaid()
@MultiTenentQueryAllowed(true)
@TableAccessControl({

View File

@@ -24,7 +24,11 @@ import TableMetadata from 'Common/Types/Database/TableMetadata';
import IconProp from 'Common/Types/Icon/IconProp';
import AllowAccessIfSubscriptionIsUnpaid from 'Common/Types/Database/AccessControl/AllowAccessIfSubscriptionIsUnpaid';
import ObjectID from 'Common/Types/ObjectID';
import EnableDocumentation from 'Common/Types/Model/EnableDocumentation';
@EnableDocumentation({
isMasterAdminApiDocs: true
})
@AllowAccessIfSubscriptionIsUnpaid()
@TableAccessControl({
create: [Permission.Public],