(actorRoles rbac.ExpandableRoles, roles []rbac.Role, customRoles []database.CustomRole)
| 85 | } |
| 86 | |
| 87 | func assignableRoles(actorRoles rbac.ExpandableRoles, roles []rbac.Role, customRoles []database.CustomRole) []codersdk.AssignableRoles { |
| 88 | assignable := make([]codersdk.AssignableRoles, 0) |
| 89 | for _, role := range roles { |
| 90 | // The member role is implied, and not assignable. |
| 91 | // If there is no display name, then the role is also unassigned. |
| 92 | // This is not the ideal logic, but works for now. |
| 93 | if role.Identifier == rbac.RoleMember() || (role.DisplayName == "") { |
| 94 | continue |
| 95 | } |
| 96 | assignable = append(assignable, codersdk.AssignableRoles{ |
| 97 | Role: db2sdk.RBACRole(role), |
| 98 | Assignable: rbac.CanAssignRole(actorRoles, role.Identifier), |
| 99 | BuiltIn: true, |
| 100 | }) |
| 101 | } |
| 102 | |
| 103 | for _, role := range customRoles { |
| 104 | canAssign := rbac.CanAssignRole(actorRoles, rbac.CustomSiteRole()) |
| 105 | if role.RoleIdentifier().IsOrgRole() { |
| 106 | canAssign = rbac.CanAssignRole(actorRoles, rbac.CustomOrganizationRole(role.OrganizationID.UUID)) |
| 107 | } |
| 108 | |
| 109 | assignable = append(assignable, codersdk.AssignableRoles{ |
| 110 | Role: db2sdk.Role(role), |
| 111 | Assignable: canAssign, |
| 112 | BuiltIn: false, |
| 113 | }) |
| 114 | } |
| 115 | return assignable |
| 116 | } |
no test coverage detected