Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions lib/services/useracl.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,8 @@ type UserACL struct {
ExternalAuditStorage ResourceAccess `json:"externalAuditStorage"`
// AccessGraph defines access to access graph.
AccessGraph ResourceAccess `json:"accessGraph"`
// Bots defines access to manage Bots.
Bots ResourceAccess `json:"bots"`
}

func hasAccess(roleSet RoleSet, ctx *Context, kind string, verbs ...string) bool {
Expand Down Expand Up @@ -180,6 +182,7 @@ func NewUserACL(user types.User, userRoles RoleSet, features proto.Features, des
lockAccess := newAccess(userRoles, ctx, types.KindLock)
accessListAccess := newAccess(userRoles, ctx, types.KindAccessList)
externalAuditStorage := newAccess(userRoles, ctx, types.KindExternalAuditStorage)
bots := newAccess(userRoles, ctx, types.KindBot)

var auditQuery ResourceAccess
var securityReports ResourceAccess
Expand Down Expand Up @@ -223,5 +226,6 @@ func NewUserACL(user types.User, userRoles RoleSet, features proto.Features, des
SecurityReport: securityReports,
ExternalAuditStorage: externalAuditStorage,
AccessGraph: accessGraphAccess,
Bots: bots,
}
}
3 changes: 2 additions & 1 deletion lib/services/useracl_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ func TestNewUserACL(t *testing.T) {
require.Empty(t, cmp.Diff(userContext.ConnectionDiagnostic, denied))
require.Empty(t, cmp.Diff(userContext.Desktops, allowedRW))
require.Empty(t, cmp.Diff(userContext.ExternalAuditStorage, denied))
require.Empty(t, cmp.Diff(userContext.Bots, denied))

require.Empty(t, cmp.Diff(userContext.Billing, denied))
require.True(t, userContext.Clipboard)
Expand Down Expand Up @@ -152,7 +153,7 @@ func TestNewUserACLCloud(t *testing.T) {
require.Empty(t, cmp.Diff(userContext.AccessRequests, allowedRW))
require.Empty(t, cmp.Diff(userContext.DiscoveryConfig, allowedRW))
require.Empty(t, cmp.Diff(userContext.ExternalAuditStorage, allowedRW))

require.Empty(t, cmp.Diff(userContext.Bots, allowedRW))
require.True(t, userContext.Clipboard)
require.True(t, userContext.DesktopSessionRecording)

Expand Down
1 change: 1 addition & 0 deletions web/packages/teleport/src/mocks/contexts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ export const allAccessAcl: Acl = {
securityReport: fullAccess,
externalAuditStorage: fullAccess,
accessGraph: fullAccess,
bots: fullAccess,
};

export function getAcl(cfg?: { noAccess: boolean }) {
Expand Down
3 changes: 3 additions & 0 deletions web/packages/teleport/src/services/user/makeAcl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ export function makeAcl(json): Acl {
const samlIdpServiceProvider = json.samlIdpServiceProvider || defaultAccess;
const accessGraph = json.accessGraph || defaultAccess;

const bots = json.bots || defaultAccess;

return {
accessList,
authConnectors,
Expand Down Expand Up @@ -104,6 +106,7 @@ export function makeAcl(json): Acl {
securityReport,
externalAuditStorage,
accessGraph,
bots,
};
}

Expand Down
1 change: 1 addition & 0 deletions web/packages/teleport/src/services/user/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ export interface Acl {
securityReport: Access;
externalAuditStorage: Access;
accessGraph: Access;
bots: Access;
}

// AllTraits represent all the traits defined for a user.
Expand Down
7 changes: 7 additions & 0 deletions web/packages/teleport/src/services/user/user.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,13 @@ test('undefined values in context response gives proper default values', async (
create: false,
remove: false,
},
bots: {
list: false,
read: false,
edit: false,
create: false,
remove: false,
},
clipboardSharingEnabled: true,
desktopSessionRecordingEnabled: true,
directorySharingEnabled: true,
Expand Down