Skip to content

Commit 3575a95

Browse files
committed
feat(front): add feature flag and permissions to service accounts
1 parent e092beb commit 3575a95

File tree

7 files changed

+23
-9
lines changed

7 files changed

+23
-9
lines changed

front/lib/front/auth.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,8 @@ defmodule Front.Auth do
313313
"project.secrets.manage" -> :ManageProjectSecrets
314314
"project.deployment_targets.view" -> :ViewDeploymentTargets
315315
"project.deployment_targets.manage" -> :ManageDeploymentTargets
316+
"service_accounts.view" -> :ViewServiceAccounts
317+
"service_accounts.manage" -> :ManageServiceAccounts
316318
_ -> :unknown
317319
end
318320
end

front/lib/front_web/controllers/service_account_controller.ex

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,17 @@ defmodule FrontWeb.ServiceAccountController do
55
alias Front.{Audit, ServiceAccount}
66
alias FrontWeb.Plugs
77

8-
plug(Plugs.FetchPermissions)
9-
plug(Plugs.PageAccess, permission: "service_accounts.view")
8+
plug(Plugs.FetchPermissions, scope: "org")
9+
plug(Plugs.PageAccess, permissions: "service_accounts.view")
1010

1111
plug(
1212
Plugs.PageAccess,
13-
[permission: "service_accounts.manage"]
13+
[permissions: "service_accounts.manage"]
1414
when action in [:create, :update, :delete, :regenerate_token]
1515
)
1616

17+
plug(Plugs.FeatureEnabled, [:service_accounts])
18+
1719
def index(conn, params) do
1820
org_id = conn.assigns.organization_id
1921
page_size = String.to_integer(params["page_size"] || "20")

front/lib/front_web/plugs/organization_authorization.ex

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ defmodule FrontWeb.Plugs.OrganizationAuthorization do
1919
alias FrontWeb.SelfHostedAgentController, as: SelfHostedAgent
2020
alias FrontWeb.SettingsController, as: Settings
2121
alias FrontWeb.SupportController, as: Support
22+
alias FrontWeb.ServiceAccountController, as: ServiceAccount
2223

2324
alias Front.Auth
2425

@@ -119,6 +120,12 @@ defmodule FrontWeb.Plugs.OrganizationAuthorization do
119120
defp authorize(Billing, :invoices, conn), do: Auth.private(conn, :ManageBilling)
120121
defp authorize(Billing, _, conn), do: Auth.private(conn, :ViewBilling)
121122

123+
defp authorize(ServiceAccount, action, conn)
124+
when action in [:create, :update, :delete, :regenerate_token],
125+
do: Auth.private(conn, :ManageServiceAccounts)
126+
127+
defp authorize(ServiceAccount, _, conn), do: Auth.private(conn, :ViewServiceAccounts)
128+
122129
defp can?(conn, permission) do
123130
user_id = conn.assigns.user_id
124131
org_id = conn.assigns.organization_id

front/lib/front_web/views/service_account_view.ex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ defmodule FrontWeb.ServiceAccountView do
99
}
1010
end
1111

12-
def render("show.json", %{service_account: %ServiceAccount{} = service_account} = assigns) do
12+
def render("show.json", assigns = %{service_account: service_account = %ServiceAccount{}}) do
1313
data = service_account_json(service_account)
1414

1515
# Only include api_token if it's present (on create/regenerate)
@@ -19,7 +19,7 @@ defmodule FrontWeb.ServiceAccountView do
1919
end
2020
end
2121

22-
defp service_account_json(%ServiceAccount{} = service_account) do
22+
defp service_account_json(service_account = %ServiceAccount{}) do
2323
%{
2424
id: service_account.id,
2525
name: service_account.name,
@@ -32,7 +32,7 @@ defmodule FrontWeb.ServiceAccountView do
3232

3333
defp format_datetime(nil), do: nil
3434

35-
defp format_datetime(%DateTime{} = datetime) do
35+
defp format_datetime(datetime = %DateTime{}) do
3636
DateTime.to_iso8601(datetime)
3737
end
3838
end

front/test/support/stubs/feature.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@ defmodule Support.Stubs.Feature do
138138
{"open_id_connect_filter", state: :ENABLED, quantity: 1},
139139
{"wf_editor_via_jobs", state: :HIDDEN, quantity: 0},
140140
{"ui_reports", state: :ENABLED, quantity: 1},
141-
{"ui_partial_ppl_rebuild", state: :ENABLED, quantity: 1}
141+
{"ui_partial_ppl_rebuild", state: :ENABLED, quantity: 1},
142+
{"service_accounts", state: :ENABLED, quantity: 1}
142143
]
143144
end
144145

front/test/support/stubs/permission_patrol.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
defmodule Support.Stubs.PermissionPatrol do
22
alias Support.Stubs.DB
33

4-
@all_organization_permissions "organization.custom_roles.view,organization.custom_roles.manage,organization.okta.view,organization.okta.manage,organization.contact_support,organization.delete,organization.view,organization.secrets_policy_settings.manage,organization.secrets_policy_settings.view,organization.activity_monitor.view,organization.projects.create,organization.audit_logs.view,organization.audit_logs.manage,organization.people.view,organization.people.invite,organization.people.manage,organization.groups.view,organization.groups.manage,organization.custom_roles.manage,organization.self_hosted_agents.view,organization.self_hosted_agents.manage,organization.general_settings.view,organization.general_settings.manage,organization.secrets.view,organization.secrets.manage,organization.ip_allow_list.view,organization.ip_allow_list.manage,organization.notifications.view,organization.notifications.manage,organization.pre_flight_checks.view,organization.pre_flight_checks.manage,organization.plans_and_billing.view,organization.plans_and_billing.manage,organization.repo_to_role_mappers.manage,organization.dashboards.view,organization.dashboards.manage,organization.instance_git_integration.manage"
4+
@all_organization_permissions "organization.custom_roles.view,organization.custom_roles.manage,organization.okta.view,organization.okta.manage,organization.contact_support,organization.delete,organization.view,organization.secrets_policy_settings.manage,organization.secrets_policy_settings.view,organization.activity_monitor.view,organization.projects.create,organization.audit_logs.view,organization.audit_logs.manage,organization.people.view,organization.people.invite,organization.people.manage,organization.groups.view,organization.groups.manage,organization.custom_roles.manage,organization.self_hosted_agents.view,organization.self_hosted_agents.manage,organization.general_settings.view,organization.general_settings.manage,organization.secrets.view,organization.secrets.manage,organization.ip_allow_list.view,organization.ip_allow_list.manage,organization.notifications.view,organization.notifications.manage,organization.pre_flight_checks.view,organization.pre_flight_checks.manage,organization.plans_and_billing.view,organization.plans_and_billing.manage,organization.repo_to_role_mappers.manage,organization.dashboards.view,organization.dashboards.manage,organization.instance_git_integration.manage,service_accounts.view,service_accounts.manage"
55
@all_project_permissions "project.view,project.delete,project.access.view,project.access.manage,project.debug,project.secrets.view,project.secrets.manage,project.notifications.view,project.notifications.manage,project.insights.view,project.insights.manage,project.artifacts.view,project.artifacts.delete,project.artifacts.view_settings,project.artifacts.modify_settings,project.scheduler.view,project.scheduler.manage,project.scheduler.run_manually,project.general_settings.view,project.general_settings.manage,project.repository_info.view,project.repository_info.manage,project.deployment_targets.view,project.deployment_targets.manage,project.pre_flight_checks.view,project.pre_flight_checks.manage,project.workflow.view,project.workflow.manage,project.job.view,project.job.rerun,project.job.stop,project.job.port_forwarding,project.job.attach"
66

77
def init do

front/test/support/stubs/rbac.ex

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ defmodule Support.Stubs.RBAC do
4646
"organization.plans_and_billing.manage",
4747
"organization.repo_to_role_mappers.manage",
4848
"organization.dashboards.view",
49-
"organization.dashboards.manage"
49+
"organization.dashboards.manage",
50+
"service_accounts.view",
51+
"service_accounts.manage"
5052
]
5153

5254
@project_permissions [

0 commit comments

Comments
 (0)