Skip to content

Commit fa96a09

Browse files
authored
feat: BED-6674 add Auditor role (#2016)
* database migration for new auditor role and permissions * new auditor role and permissions * pfc * remove createToken permission; sql refactor * add back CreateToken permissions
1 parent fea0e8a commit fa96a09

File tree

4 files changed

+66
-2
lines changed

4 files changed

+66
-2
lines changed

cmd/api/src/api/registration/v2.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,7 @@ func NewV2API(resources v2.Resources, routerInst *router.Router) {
146146
routerInst.GET("/api/v2/available-domains", resources.GetAvailableDomains).RequirePermissions(permissions.GraphDBRead),
147147

148148
// Audit API
149-
// TODO: This might actually need its own permission that's assigned to the Administrator user by default
150-
routerInst.GET("/api/v2/audit", resources.ListAuditLogs).RequirePermissions(permissions.AuthManageUsers),
149+
routerInst.GET("/api/v2/audit", resources.ListAuditLogs).RequirePermissions(permissions.AuditLogRead),
151150

152151
// App Config API
153152
routerInst.GET("/api/v2/config", resources.GetApplicationConfigurations).RequirePermissions(permissions.AppReadApplicationConfiguration),

cmd/api/src/auth/permission.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ type PermissionSet struct {
2727
APsGenerateReport model.Permission
2828
APsManageAPs model.Permission
2929

30+
AuditLogRead model.Permission
31+
3032
AuthAcceptEULA model.Permission
3133
AuthCreateToken model.Permission
3234
AuthManageApplicationConfigurations model.Permission
@@ -58,6 +60,7 @@ func (s PermissionSet) All() model.Permissions {
5860
s.AppWriteApplicationConfiguration,
5961
s.APsGenerateReport,
6062
s.APsManageAPs,
63+
s.AuditLogRead,
6164
s.AuthCreateToken,
6265
s.AuthManageApplicationConfigurations,
6366
s.AuthManageProviders,
@@ -87,6 +90,8 @@ func Permissions() PermissionSet {
8790
APsGenerateReport: model.NewPermission("risks", "GenerateReport"),
8891
APsManageAPs: model.NewPermission("risks", "ManageRisks"),
8992

93+
AuditLogRead: model.NewPermission("audit_log", "Read"),
94+
9095
AuthAcceptEULA: model.NewPermission("auth", "AcceptEULA"),
9196
AuthCreateToken: model.NewPermission("auth", "CreateToken"),
9297
AuthManageApplicationConfigurations: model.NewPermission("auth", "ManageAppConfig"),

cmd/api/src/auth/role.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
const (
2424
RoleUploadOnly = "Upload-Only"
2525
RoleReadOnly = "Read-Only"
26+
RoleAuditor = "Auditor"
2627
RoleUser = "User"
2728
RolePowerUser = "Power User"
2829
RoleAdministrator = "Administrator"
@@ -59,6 +60,21 @@ func Roles() map[string]RoleTemplate {
5960
permissions.GraphDBIngest,
6061
},
6162
},
63+
RoleAuditor: {
64+
Name: RoleAuditor,
65+
Description: "Can read data and audit logs",
66+
Permissions: model.Permissions{
67+
permissions.AppReadApplicationConfiguration,
68+
permissions.APsGenerateReport,
69+
permissions.AuthCreateToken,
70+
permissions.AuditLogRead,
71+
permissions.AuthManageSelf,
72+
permissions.AuthReadUsers,
73+
permissions.ClientsRead,
74+
permissions.GraphDBRead,
75+
permissions.SavedQueriesRead,
76+
},
77+
},
6278
RoleUser: {
6379
Name: RoleUser,
6480
Description: "Can read data, modify asset group memberships",
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
-- Copyright 2025 Specter Ops, Inc.
2+
--
3+
-- Licensed under the Apache License, Version 2.0
4+
-- you may not use this file except in compliance with the License.
5+
-- You may obtain a copy of the License at
6+
--
7+
-- http://www.apache.org/licenses/LICENSE-2.0
8+
--
9+
-- Unless required by applicable law or agreed to in writing, software
10+
-- distributed under the License is distributed on an "AS IS" BASIS,
11+
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
-- See the License for the specific language governing permissions and
13+
-- limitations under the License.
14+
--
15+
-- SPDX-License-Identifier: Apache-2.0
16+
17+
-- Add Audit Log permission and Auditor role
18+
INSERT INTO permissions (authority, name, created_at, updated_at) VALUES ('audit_log', 'Read', current_timestamp, current_timestamp) ON CONFLICT DO NOTHING;
19+
20+
INSERT INTO roles (name, description, created_at, updated_at) VALUES
21+
('Auditor', 'Can read data and audit logs', current_timestamp, current_timestamp) ON CONFLICT DO NOTHING;
22+
23+
INSERT INTO roles_permissions (role_id, permission_id)
24+
SELECT r.id, p.id
25+
FROM roles r
26+
JOIN permissions p
27+
ON (
28+
(r.name = 'Auditor' AND (p.authority, p.name) IN (
29+
('app', 'ReadAppConfig'),
30+
('risks', 'GenerateReport'),
31+
('audit_log', 'Read'),
32+
('auth', 'CreateToken'),
33+
('auth', 'ManageSelf'),
34+
('auth', 'ReadUsers'),
35+
('graphdb', 'Read'),
36+
('saved_queries', 'Read'),
37+
('clients', 'Read')
38+
))
39+
OR
40+
(r.name = 'Administrator' AND (p.authority, p.name) IN (
41+
('audit_log', 'Read')
42+
))
43+
)
44+
ON CONFLICT DO NOTHING;

0 commit comments

Comments
 (0)