diff --git a/app/database/migration/server/index.ts b/app/database/migration/server/index.ts index 80a16d6ca..e2d6eacb6 100644 --- a/app/database/migration/server/index.ts +++ b/app/database/migration/server/index.ts @@ -11,6 +11,17 @@ import {MM_TABLES} from '@constants/database'; const {CHANNEL_BOOKMARK, CHANNEL_INFO, DRAFT, FILE, POST, CHANNEL, CUSTOM_PROFILE_ATTRIBUTE, CUSTOM_PROFILE_FIELD, SCHEDULED_POST} = MM_TABLES.SERVER; export default schemaMigrations({migrations: [ + { + toVersion: 11, + steps: [ + addColumns({ + table: CHANNEL, + columns: [ + {name: 'abac_policy_enforced', type: 'boolean', isOptional: true}, + ], + }), + ], + }, { toVersion: 10, steps: [ diff --git a/app/database/models/server/channel.ts b/app/database/models/server/channel.ts index ebaab298f..6d59e2145 100644 --- a/app/database/models/server/channel.ts +++ b/app/database/models/server/channel.ts @@ -112,6 +112,9 @@ export default class ChannelModel extends Model implements ChannelModelInterface /** bannerInfo : The banner information for the channel */ @json('banner_info', safeParseJSON) bannerInfo?: ChannelBannerInfo; + /** policy_enforced : Whether the Attribute-Based Access Control (ABAC) policy is enforced for this channel, controlling access based on user attributes */ + @field('abac_policy_enforced') abacPolicyEnforced?: boolean; + /** members : Users belonging to this channel */ @children(CHANNEL_MEMBERSHIP) members!: Query; @@ -163,6 +166,7 @@ export default class ChannelModel extends Model implements ChannelModelInterface group_constrained: null, shared: this.shared, banner_info: this.bannerInfo, + policy_enforced: this.abacPolicyEnforced, }; }; } diff --git a/app/database/operator/server_data_operator/transformers/channel.ts b/app/database/operator/server_data_operator/transformers/channel.ts index 9358b4940..a47f5b4aa 100644 --- a/app/database/operator/server_data_operator/transformers/channel.ts +++ b/app/database/operator/server_data_operator/transformers/channel.ts @@ -52,6 +52,7 @@ export const transformChannelRecord = ({action, database, value}: TransformerArg channel.teamId = raw.team_id; channel.type = raw.type; channel.bannerInfo = raw.banner_info; + channel.abacPolicyEnforced = Boolean(raw.policy_enforced); }; return prepareBaseRecord({ diff --git a/app/database/schema/server/index.ts b/app/database/schema/server/index.ts index 2d35d92f7..69d31d744 100644 --- a/app/database/schema/server/index.ts +++ b/app/database/schema/server/index.ts @@ -43,7 +43,7 @@ import { } from './table_schemas'; export const serverSchema: AppSchema = appSchema({ - version: 10, + version: 11, tables: [ CategorySchema, CategoryChannelSchema, diff --git a/app/database/schema/server/table_schemas/channel.ts b/app/database/schema/server/table_schemas/channel.ts index 1619f976e..3ee49976a 100644 --- a/app/database/schema/server/table_schemas/channel.ts +++ b/app/database/schema/server/table_schemas/channel.ts @@ -21,5 +21,6 @@ export default tableSchema({ {name: 'type', type: 'string'}, {name: 'update_at', type: 'number'}, {name: 'banner_info', type: 'string', isOptional: true}, + {name: 'abac_policy_enforced', type: 'boolean', isOptional: true}, ], }); diff --git a/app/database/schema/server/test.ts b/app/database/schema/server/test.ts index 64e914eba..867a99a66 100644 --- a/app/database/schema/server/test.ts +++ b/app/database/schema/server/test.ts @@ -49,7 +49,7 @@ const { describe('*** Test schema for SERVER database ***', () => { it('=> The SERVER SCHEMA should strictly match', () => { expect(serverSchema).toEqual({ - version: 10, + version: 11, unsafeSql: undefined, tables: { [CATEGORY]: { @@ -126,7 +126,7 @@ describe('*** Test schema for SERVER database ***', () => { type: {name: 'type', type: 'string'}, update_at: {name: 'update_at', type: 'number'}, banner_info: {name: 'banner_info', type: 'string', isOptional: true}, - + abac_policy_enforced: {name: 'abac_policy_enforced', type: 'boolean', isOptional: true}, }, columnArray: [ {name: 'create_at', type: 'number'}, @@ -140,6 +140,7 @@ describe('*** Test schema for SERVER database ***', () => { {name: 'type', type: 'string'}, {name: 'update_at', type: 'number'}, {name: 'banner_info', type: 'string', isOptional: true}, + {name: 'abac_policy_enforced', type: 'boolean', isOptional: true}, ], }, [CHANNEL_BOOKMARK]: { diff --git a/types/database/models/servers/channel.ts b/types/database/models/servers/channel.ts index 38d160318..fa7e33fb3 100644 --- a/types/database/models/servers/channel.ts +++ b/types/database/models/servers/channel.ts @@ -56,6 +56,9 @@ declare class ChannelModel extends Model { bannerInfo?: ChannelBannerInfo; + /** Whether the channel has Attribute-Based Access Control (ABAC) policy enforcement enabled, controlling access based on user attributes */ + abacPolicyEnforced?: boolean; + /** members : Users belonging to this channel */ members: Query;