Skip to content

Commit 8ca313b

Browse files
committed
feat: add has_rbac feature flag
1 parent 19b41a5 commit 8ca313b

6 files changed

Lines changed: 42 additions & 0 deletions

File tree

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
exports.config = { transaction: false };
2+
3+
/**
4+
* @param {import('knex').Knex} knex
5+
*/
6+
exports.up = async function (knex) {
7+
await knex.raw(`ALTER TABLE "plans" ADD COLUMN IF NOT EXISTS "has_rbac" bool NOT NULL DEFAULT 'false'`);
8+
// Backfill growth+ plans, while grandfathering accounts that already use RBAC.
9+
await knex.raw(`
10+
UPDATE "plans" AS p
11+
SET "has_rbac" = true
12+
WHERE p."name" IN ('growth', 'growth-v2', 'enterprise')
13+
OR EXISTS (
14+
SELECT 1
15+
FROM "_nango_users" AS u
16+
WHERE u."account_id" = p."account_id"
17+
AND u."role" <> 'administrator'
18+
)
19+
`);
20+
};
21+
22+
/**
23+
* @param {import('knex').Knex} knex
24+
*/
25+
exports.down = async function () {};

packages/shared/lib/seeders/plan.seeder.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export function getTestPlan(override?: Partial<DBPlan>): DBPlan {
3333
auto_idle: true,
3434
has_webhooks_script: false,
3535
has_webhooks_forward: false,
36+
has_rbac: false,
3637
can_override_docs_connect_url: false,
3738
can_customize_connect_ui_theme: false,
3839
can_disable_connect_ui_watermark: false,

packages/shared/lib/services/plans/definitions.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export const freePlan: PlanDefinition = {
2525
monthly_active_records_max: 5000,
2626
has_webhooks_script: true,
2727
has_webhooks_forward: true,
28+
has_rbac: false,
2829
can_override_docs_connect_url: false,
2930
can_customize_connect_ui_theme: false,
3031
can_disable_connect_ui_watermark: false,
@@ -66,6 +67,7 @@ export const starterV1Plan: PlanDefinition = {
6667
trial_expired: null,
6768
has_webhooks_script: false,
6869
has_webhooks_forward: false,
70+
has_rbac: false,
6971
can_override_docs_connect_url: false,
7072
can_customize_connect_ui_theme: false,
7173
can_disable_connect_ui_watermark: false
@@ -104,6 +106,7 @@ export const growthV1Plan: PlanDefinition = {
104106
trial_expired: null,
105107
has_webhooks_script: true,
106108
has_webhooks_forward: true,
109+
has_rbac: true,
107110
can_override_docs_connect_url: false,
108111
can_customize_connect_ui_theme: true,
109112
can_disable_connect_ui_watermark: true
@@ -169,6 +172,7 @@ export const enterprisePlan: PlanDefinition = {
169172
trial_expired: null,
170173
has_webhooks_script: true,
171174
has_webhooks_forward: true,
175+
has_rbac: true,
172176
can_override_docs_connect_url: false,
173177
can_customize_connect_ui_theme: true,
174178
can_disable_connect_ui_watermark: true
@@ -207,6 +211,7 @@ export const starterLegacyPlan: PlanDefinition = {
207211
trial_expired: null,
208212
has_webhooks_script: true,
209213
has_webhooks_forward: true,
214+
has_rbac: false,
210215
can_override_docs_connect_url: false,
211216
can_customize_connect_ui_theme: false,
212217
can_disable_connect_ui_watermark: false
@@ -244,6 +249,7 @@ export const scaleLegacyPlan: PlanDefinition = {
244249
trial_expired: null,
245250
has_webhooks_script: true,
246251
has_webhooks_forward: true,
252+
has_rbac: true,
247253
can_override_docs_connect_url: false,
248254
can_customize_connect_ui_theme: false,
249255
can_disable_connect_ui_watermark: false
@@ -281,6 +287,7 @@ export const growthLegacyPlan: PlanDefinition = {
281287
trial_expired: null,
282288
has_webhooks_script: true,
283289
has_webhooks_forward: true,
290+
has_rbac: true,
284291
can_override_docs_connect_url: false,
285292
can_customize_connect_ui_theme: true,
286293
can_disable_connect_ui_watermark: true

packages/shared/lib/services/plans/plans.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ export function mergeFlags({ currentPlan, newPlanDefinition }: { currentPlan: DB
226226
case 'has_otel':
227227
case 'has_webhooks_script':
228228
case 'has_webhooks_forward':
229+
case 'has_rbac':
229230
case 'can_disable_connect_ui_watermark':
230231
case 'can_override_docs_connect_url':
231232
case 'can_customize_connect_ui_theme': {

packages/shared/lib/services/plans/plans.unit.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ function makePlan({ code, flagOverrides }: { code: DBPlan['name']; flagOverrides
103103
has_otel: false,
104104
has_webhooks_forward: false,
105105
has_webhooks_script: false,
106+
has_rbac: false,
106107
can_customize_connect_ui_theme: false,
107108
can_override_docs_connect_url: false,
108109
can_disable_connect_ui_watermark: false,

packages/types/lib/plans/db.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,13 @@ export interface DBPlan extends Timestamps {
126126
*/
127127
has_webhooks_forward: boolean;
128128

129+
/**
130+
* Enable role-based access control (non-administrator roles)
131+
* When false, all users/invites must be 'administrator'
132+
* @default false
133+
*/
134+
has_rbac: boolean;
135+
129136
/**
130137
* Enable or disable the ability to override the docs connect url from the connect session
131138
* @default false

0 commit comments

Comments
 (0)