diff --git a/packages/grafana-data/src/types/config.ts b/packages/grafana-data/src/types/config.ts index 7040900e88a..266634540ba 100644 --- a/packages/grafana-data/src/types/config.ts +++ b/packages/grafana-data/src/types/config.ts @@ -182,7 +182,6 @@ export interface GrafanaConfig { verifyEmailEnabled: boolean; oauth: OAuthSettings; rbacEnabled: boolean; - rbacBuiltInRoleAssignmentEnabled: boolean; disableUserSignUp: boolean; loginHint: string; passwordHint: string; diff --git a/packages/grafana-runtime/src/config.ts b/packages/grafana-runtime/src/config.ts index e1c471f0199..6f6d1929489 100644 --- a/packages/grafana-runtime/src/config.ts +++ b/packages/grafana-runtime/src/config.ts @@ -62,7 +62,6 @@ export class GrafanaBootConfig implements GrafanaConfig { verifyEmailEnabled = false; oauth: OAuthSettings = {}; rbacEnabled = true; - rbacBuiltInRoleAssignmentEnabled = false; disableUserSignUp = false; loginHint = ''; passwordHint = ''; diff --git a/pkg/api/frontendsettings.go b/pkg/api/frontendsettings.go index 45752ef8072..9dd4f902409 100644 --- a/pkg/api/frontendsettings.go +++ b/pkg/api/frontendsettings.go @@ -112,7 +112,6 @@ func (hs *HTTPServer) getFrontendSettingsMap(c *models.ReqContext) (map[string]i "sigV4AuthEnabled": setting.SigV4AuthEnabled, "azureAuthEnabled": setting.AzureAuthEnabled, "rbacEnabled": hs.Cfg.RBACEnabled, - "rbacBuiltInRoleAssignmentEnabled": hs.Cfg.RBACBuiltInRoleAssignmentEnabled, "exploreEnabled": setting.ExploreEnabled, "helpEnabled": setting.HelpEnabled, "profileEnabled": setting.ProfileEnabled, diff --git a/pkg/services/accesscontrol/accesscontrol.go b/pkg/services/accesscontrol/accesscontrol.go index 3c7b13c68de..97887d38cf0 100644 --- a/pkg/services/accesscontrol/accesscontrol.go +++ b/pkg/services/accesscontrol/accesscontrol.go @@ -272,16 +272,9 @@ func IsDisabled(cfg *setting.Cfg) bool { } // GetOrgRoles returns legacy org roles for a user -func GetOrgRoles(cfg *setting.Cfg, user *user.SignedInUser) []string { +func GetOrgRoles(user *user.SignedInUser) []string { roles := []string{string(user.OrgRole)} - // With built-in role simplifying, inheritance is performed upon role registration. - if cfg.RBACBuiltInRoleAssignmentEnabled { - for _, br := range user.OrgRole.Children() { - roles = append(roles, string(br)) - } - } - if user.IsGrafanaAdmin { roles = append(roles, RoleGrafanaAdmin) } diff --git a/pkg/services/accesscontrol/ossaccesscontrol/ossaccesscontrol.go b/pkg/services/accesscontrol/ossaccesscontrol/ossaccesscontrol.go index 3ca1d339173..3c87174e1ab 100644 --- a/pkg/services/accesscontrol/ossaccesscontrol/ossaccesscontrol.go +++ b/pkg/services/accesscontrol/ossaccesscontrol/ossaccesscontrol.go @@ -112,7 +112,7 @@ func (ac *OSSAccessControlService) GetUserPermissions(ctx context.Context, user dbPermissions, err := ac.store.GetUserPermissions(ctx, accesscontrol.GetUserPermissionsQuery{ OrgID: user.OrgID, UserID: user.UserID, - Roles: accesscontrol.GetOrgRoles(ac.cfg, user), + Roles: accesscontrol.GetOrgRoles(user), TeamIDs: user.Teams, Actions: actionsToFetch, }) @@ -136,7 +136,7 @@ func (ac *OSSAccessControlService) GetUserPermissions(ctx context.Context, user func (ac *OSSAccessControlService) getFixedPermissions(ctx context.Context, user *user.SignedInUser) []accesscontrol.Permission { permissions := make([]accesscontrol.Permission, 0) - for _, builtin := range accesscontrol.GetOrgRoles(ac.cfg, user) { + for _, builtin := range accesscontrol.GetOrgRoles(user) { if basicRole, ok := ac.roles[builtin]; ok { permissions = append(permissions, basicRole.Permissions...) } diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go index 8b18109ef92..0de828a22fc 100644 --- a/pkg/setting/setting.go +++ b/pkg/setting/setting.go @@ -451,9 +451,6 @@ type Cfg struct { // Access Control RBACEnabled bool RBACPermissionCache bool - // Undocumented option as a backup in case removing builtin-role assignment - // fails - RBACBuiltInRoleAssignmentEnabled bool } type CommandLineArgs struct { @@ -1356,7 +1353,6 @@ func readAccessControlSettings(iniFile *ini.File, cfg *Cfg) { rbac := iniFile.Section("rbac") cfg.RBACEnabled = rbac.Key("enabled").MustBool(true) cfg.RBACPermissionCache = rbac.Key("permission_cache").MustBool(true) - cfg.RBACBuiltInRoleAssignmentEnabled = rbac.Key("builtin_role_assignment_enabled").MustBool(false) } func readUserSettings(iniFile *ini.File, cfg *Cfg) error { diff --git a/public/app/core/components/RolePicker/RolePicker.tsx b/public/app/core/components/RolePicker/RolePicker.tsx index d70dfe3fd13..f6821b19774 100644 --- a/public/app/core/components/RolePicker/RolePicker.tsx +++ b/public/app/core/components/RolePicker/RolePicker.tsx @@ -8,44 +8,43 @@ import { RolePickerMenu } from './RolePickerMenu'; import { MENU_MAX_HEIGHT, ROLE_PICKER_WIDTH } from './constants'; export interface Props { - builtInRole?: OrgRole; + basicRole?: OrgRole; appliedRoles: Role[]; roleOptions: Role[]; - builtInRoles?: Record; isLoading?: boolean; disabled?: boolean; - builtinRolesDisabled?: boolean; - showBuiltInRole?: boolean; + basicRoleDisabled?: boolean; + showBasicRole?: boolean; onRolesChange: (newRoles: Role[]) => void; - onBuiltinRoleChange?: (newRole: OrgRole) => void; + onBasicRoleChange?: (newRole: OrgRole) => void; canUpdateRoles?: boolean; apply?: boolean; } export const RolePicker = ({ - builtInRole, + basicRole, appliedRoles, roleOptions, disabled, isLoading, - builtinRolesDisabled, - showBuiltInRole, + basicRoleDisabled, + showBasicRole, onRolesChange, - onBuiltinRoleChange, + onBasicRoleChange, canUpdateRoles = true, apply = false, }: Props): JSX.Element | null => { const [isOpen, setOpen] = useState(false); const [selectedRoles, setSelectedRoles] = useState(appliedRoles); - const [selectedBuiltInRole, setSelectedBuiltInRole] = useState(builtInRole); + const [selectedBuiltInRole, setSelectedBuiltInRole] = useState(basicRole); const [query, setQuery] = useState(''); const [offset, setOffset] = useState({ vertical: 0, horizontal: 0 }); const ref = useRef(null); useEffect(() => { - setSelectedBuiltInRole(builtInRole); + setSelectedBuiltInRole(basicRole); setSelectedRoles(appliedRoles); - }, [appliedRoles, builtInRole]); + }, [appliedRoles, basicRole]); useEffect(() => { const dimensions = ref?.current?.getBoundingClientRect(); @@ -85,8 +84,8 @@ export const RolePicker = ({ setOpen(false); setQuery(''); setSelectedRoles(appliedRoles); - setSelectedBuiltInRole(builtInRole); - }, [appliedRoles, builtInRole]); + setSelectedBuiltInRole(basicRole); + }, [appliedRoles, basicRole]); // Only call onClose if menu is open. Prevent unnecessary calls for multiple pickers on the page. const onClickOutside = () => isOpen && onClose(); @@ -103,13 +102,13 @@ export const RolePicker = ({ setSelectedRoles(roles); }; - const onBuiltInRoleSelect = (role: OrgRole) => { + const onBasicRoleSelect = (role: OrgRole) => { setSelectedBuiltInRole(role); }; const onUpdate = (newRoles: Role[], newBuiltInRole?: OrgRole) => { - if (onBuiltinRoleChange && newBuiltInRole && newBuiltInRole !== builtInRole) { - onBuiltinRoleChange(newBuiltInRole); + if (onBasicRoleChange && newBuiltInRole && newBuiltInRole !== basicRole) { + onBasicRoleChange(newBuiltInRole); } if (canUpdateRoles) { onRolesChange(newRoles); @@ -141,7 +140,7 @@ export const RolePicker = ({
{isOpen && ( diff --git a/public/app/core/components/RolePicker/RolePickerInput.tsx b/public/app/core/components/RolePicker/RolePickerInput.tsx index 70e8f9b2ff8..d159af050ba 100644 --- a/public/app/core/components/RolePicker/RolePickerInput.tsx +++ b/public/app/core/components/RolePicker/RolePickerInput.tsx @@ -13,9 +13,9 @@ const stopPropagation = (event: React.MouseEvent) => event.stopP interface InputProps extends HTMLProps { appliedRoles: Role[]; - builtInRole?: string; + basicRole?: string; query: string; - showBuiltInRole?: boolean; + showBasicRole?: boolean; isFocused?: boolean; disabled?: boolean; onQueryChange: (query?: string) => void; @@ -25,11 +25,11 @@ interface InputProps extends HTMLProps { export const RolePickerInput = ({ appliedRoles, - builtInRole, + basicRole, disabled, isFocused, query, - showBuiltInRole, + showBasicRole, onOpen, onClose, onQueryChange, @@ -53,12 +53,12 @@ export const RolePickerInput = ({ return !isFocused ? (
- {showBuiltInRole && {builtInRole}} - + {showBasicRole && {basicRole}} +
) : (
- {showBuiltInRole && {builtInRole}} + {showBasicRole && {basicRole}} {appliedRoles.map((role) => ( {role.displayName} ))} diff --git a/public/app/core/components/RolePicker/RolePickerMenu.tsx b/public/app/core/components/RolePicker/RolePickerMenu.tsx index 7ff9adb5a6a..925bc841771 100644 --- a/public/app/core/components/RolePicker/RolePickerMenu.tsx +++ b/public/app/core/components/RolePicker/RolePickerMenu.tsx @@ -19,8 +19,8 @@ import { OrgRole, Role } from 'app/types'; import { MENU_MAX_HEIGHT } from './constants'; -const BuiltinRoles = Object.values(OrgRole); -const BuiltinRoleOption: Array> = BuiltinRoles.map((r) => ({ +const BasicRoles = Object.values(OrgRole); +const BasicRoleOption: Array> = BasicRoles.map((r) => ({ label: r, value: r, })); @@ -31,14 +31,14 @@ const fixedRoleGroupNames: Record = { }; interface RolePickerMenuProps { - builtInRole?: OrgRole; + basicRole?: OrgRole; options: Role[]; appliedRoles: Role[]; showGroups?: boolean; - builtinRolesDisabled?: boolean; - showBuiltInRole?: boolean; + basicRoleDisabled?: boolean; + showBasicRole?: boolean; onSelect: (roles: Role[]) => void; - onBuiltInRoleSelect?: (role: OrgRole) => void; + onBasicRoleSelect?: (role: OrgRole) => void; onUpdate: (newRoles: Role[], newBuiltInRole?: OrgRole) => void; updateDisabled?: boolean; apply?: boolean; @@ -46,21 +46,21 @@ interface RolePickerMenuProps { } export const RolePickerMenu = ({ - builtInRole, + basicRole, options, appliedRoles, showGroups, - builtinRolesDisabled, - showBuiltInRole, + basicRoleDisabled, + showBasicRole, onSelect, - onBuiltInRoleSelect, + onBasicRoleSelect, onUpdate, updateDisabled, offset, apply, }: RolePickerMenuProps): JSX.Element => { const [selectedOptions, setSelectedOptions] = useState(appliedRoles); - const [selectedBuiltInRole, setSelectedBuiltInRole] = useState(builtInRole); + const [selectedBuiltInRole, setSelectedBuiltInRole] = useState(basicRole); const [showSubMenu, setShowSubMenu] = useState(false); const [openedMenuGroup, setOpenedMenuGroup] = useState(''); const [subMenuOptions, setSubMenuOptions] = useState([]); @@ -75,10 +75,10 @@ export const RolePickerMenu = ({ }, [selectedOptions, onSelect]); useEffect(() => { - if (onBuiltInRoleSelect && selectedBuiltInRole) { - onBuiltInRoleSelect(selectedBuiltInRole); + if (onBasicRoleSelect && selectedBuiltInRole) { + onBasicRoleSelect(selectedBuiltInRole); } - }, [selectedBuiltInRole, onBuiltInRoleSelect]); + }, [selectedBuiltInRole, onBasicRoleSelect]); const customRoles = options.filter(filterCustomRoles).sort(sortRolesByName); const fixedRoles = options.filter(filterFixedRoles).sort(sortRolesByName); @@ -188,16 +188,16 @@ export const RolePickerMenu = ({ >
- {showBuiltInRole && ( + {showBasicRole && (
Basic roles
)} @@ -621,7 +621,7 @@ export const getStyles = (theme: GrafanaTheme2) => { menuOptionInfoSign: css` color: ${theme.colors.text.disabled}; `, - builtInRoleSelector: css` + basicRoleSelector: css` margin: ${theme.spacing(1, 1.25, 1, 1)}; `, subMenuPortal: css` diff --git a/public/app/core/components/RolePicker/TeamRolePicker.tsx b/public/app/core/components/RolePicker/TeamRolePicker.tsx index a1ecb070496..3bcb1894859 100644 --- a/public/app/core/components/RolePicker/TeamRolePicker.tsx +++ b/public/app/core/components/RolePicker/TeamRolePicker.tsx @@ -13,10 +13,9 @@ export interface Props { orgId?: number; roleOptions: Role[]; disabled?: boolean; - builtinRolesDisabled?: boolean; } -export const TeamRolePicker: FC = ({ teamId, orgId, roleOptions, disabled, builtinRolesDisabled }) => { +export const TeamRolePicker: FC = ({ teamId, orgId, roleOptions, disabled }) => { const [{ loading, value: appliedRoles = [] }, getTeamRoles] = useAsyncFn(async () => { try { return await fetchTeamRoles(teamId, orgId); @@ -47,7 +46,6 @@ export const TeamRolePicker: FC = ({ teamId, orgId, roleOptions, disabled appliedRoles={appliedRoles} isLoading={loading} disabled={disabled} - builtinRolesDisabled={builtinRolesDisabled} canUpdateRoles={canUpdateRoles} /> ); diff --git a/public/app/core/components/RolePicker/UserRolePicker.tsx b/public/app/core/components/RolePicker/UserRolePicker.tsx index cccceb402d7..b00e86d3936 100644 --- a/public/app/core/components/RolePicker/UserRolePicker.tsx +++ b/public/app/core/components/RolePicker/UserRolePicker.tsx @@ -8,28 +8,26 @@ import { RolePicker } from './RolePicker'; import { fetchUserRoles, updateUserRoles } from './api'; export interface Props { - builtInRole: OrgRole; + basicRole: OrgRole; userId: number; orgId?: number; - onBuiltinRoleChange: (newRole: OrgRole) => void; + onBasicRoleChange: (newRole: OrgRole) => void; roleOptions: Role[]; - builtInRoles?: { [key: string]: Role[] }; disabled?: boolean; - builtinRolesDisabled?: boolean; + basicRoleDisabled?: boolean; apply?: boolean; onApplyRoles?: (newRoles: Role[], userId: number, orgId: number | undefined) => void; pendingRoles?: Role[]; } export const UserRolePicker: FC = ({ - builtInRole, + basicRole, userId, orgId, - onBuiltinRoleChange, + onBasicRoleChange, roleOptions, - builtInRoles, disabled, - builtinRolesDisabled, + basicRoleDisabled, apply = false, onApplyRoles, pendingRoles, @@ -74,15 +72,14 @@ export const UserRolePicker: FC = ({ return ( diff --git a/public/app/core/components/RolePicker/api.ts b/public/app/core/components/RolePicker/api.ts index 82549055a0c..3b9abafbe9c 100644 --- a/public/app/core/components/RolePicker/api.ts +++ b/public/app/core/components/RolePicker/api.ts @@ -13,14 +13,6 @@ export const fetchRoleOptions = async (orgId?: number, query?: string): Promise< return roles; }; -export const fetchBuiltinRoles = (orgId?: number): Promise<{ [key: string]: Role[] }> => { - let builtinRolesUrl = '/api/access-control/builtin-roles'; - if (orgId) { - builtinRolesUrl += `?targetOrgId=${orgId}`; - } - return getBackendSrv().get(builtinRolesUrl); -}; - export const fetchUserRoles = async (userId: number, orgId?: number): Promise => { let userRolesUrl = `/api/access-control/users/${userId}/roles`; if (orgId) { diff --git a/public/app/core/services/context_srv.ts b/public/app/core/services/context_srv.ts index 301be37ad76..baaf6388e5f 100644 --- a/public/app/core/services/context_srv.ts +++ b/public/app/core/services/context_srv.ts @@ -112,10 +112,6 @@ export class ContextSrv { return config.rbacEnabled; } - accessControlBuiltInRoleAssignmentEnabled(): boolean { - return config.rbacBuiltInRoleAssignmentEnabled; - } - licensedAccessControlEnabled(): boolean { return featureEnabled('accesscontrol') && config.rbacEnabled; } diff --git a/public/app/features/admin/UserOrgs.tsx b/public/app/features/admin/UserOrgs.tsx index f9dd1335bd3..dabda75c396 100644 --- a/public/app/features/admin/UserOrgs.tsx +++ b/public/app/features/admin/UserOrgs.tsx @@ -144,7 +144,6 @@ class UnThemedOrgRow extends PureComponent { currentRole: this.props.org.role, isChangingRole: false, roleOptions: [], - builtInRoles: {}, }; componentDidMount() { @@ -179,7 +178,7 @@ class UnThemedOrgRow extends PureComponent { this.setState({ isChangingRole: false }); }; - onBuiltinRoleChange = (newRole: OrgRole) => { + onBasicRoleChange = (newRole: OrgRole) => { this.props.onOrgRoleChange(this.props.org.orgId, newRole); }; @@ -205,11 +204,10 @@ class UnThemedOrgRow extends PureComponent {
{isExternalUser && } @@ -377,9 +375,9 @@ export class AddToOrgModal extends PureComponent export const ServiceAccountCreatePage = ({}: Props): JSX.Element => { const [roleOptions, setRoleOptions] = useState([]); - const [builtinRoles, setBuiltinRoles] = useState<{ [key: string]: Role[] }>({}); const [pendingRoles, setPendingRoles] = useState([]); const currentOrgId = contextSrv.user.orgId; @@ -46,14 +45,6 @@ export const ServiceAccountCreatePage = ({}: Props): JSX.Element => { let options = await fetchRoleOptions(currentOrgId); setRoleOptions(options); } - - if ( - contextSrv.accessControlBuiltInRoleAssignmentEnabled() && - contextSrv.hasPermission(AccessControlAction.ActionBuiltinRolesList) - ) { - const builtInRoles = await fetchBuiltinRoles(currentOrgId); - setBuiltinRoles(builtInRoles); - } } catch (e) { console.error('Error loading options', e); } @@ -131,9 +122,8 @@ export const ServiceAccountCreatePage = ({}: Props): JSX.Element => { apply userId={serviceAccount.id || 0} orgId={serviceAccount.orgId} - builtInRole={serviceAccount.role} - builtInRoles={builtinRoles} - onBuiltinRoleChange={onRoleChange} + basicRole={serviceAccount.role} + onBasicRoleChange={onRoleChange} roleOptions={roleOptions} onApplyRoles={onPendingRolesUpdate} pendingRoles={pendingRoles} diff --git a/public/app/features/serviceaccounts/ServiceAccountPage.test.tsx b/public/app/features/serviceaccounts/ServiceAccountPage.test.tsx index a654a5c7278..c70c984d064 100644 --- a/public/app/features/serviceaccounts/ServiceAccountPage.test.tsx +++ b/public/app/features/serviceaccounts/ServiceAccountPage.test.tsx @@ -26,7 +26,6 @@ const setup = (propOverrides: Partial) => { const props: Props = { serviceAccount: {} as ServiceAccountDTO, tokens: [], - builtInRoles: {}, isLoading: false, roleOptions: [], match: { diff --git a/public/app/features/serviceaccounts/ServiceAccountPage.tsx b/public/app/features/serviceaccounts/ServiceAccountPage.tsx index aaeae3bc4ae..34ab7635971 100644 --- a/public/app/features/serviceaccounts/ServiceAccountPage.tsx +++ b/public/app/features/serviceaccounts/ServiceAccountPage.tsx @@ -28,7 +28,6 @@ interface OwnProps extends GrafanaRouteComponentProps<{ id: string }> { tokens: ApiKey[]; isLoading: boolean; roleOptions: Role[]; - builtInRoles: Record; } function mapStateToProps(state: StoreState) { @@ -37,7 +36,6 @@ function mapStateToProps(state: StoreState) { tokens: state.serviceAccountProfile.tokens, isLoading: state.serviceAccountProfile.isLoading, roleOptions: state.serviceAccounts.roleOptions, - builtInRoles: state.serviceAccounts.builtInRoles, timezone: getTimeZone(state.user), }; } @@ -62,7 +60,6 @@ export const ServiceAccountPageUnconnected = ({ timezone, isLoading, roleOptions, - builtInRoles, createServiceAccountToken, deleteServiceAccount, deleteServiceAccountToken, @@ -187,7 +184,6 @@ export const ServiceAccountPageUnconnected = ({ serviceAccount={serviceAccount} timeZone={timezone} roleOptions={roleOptions} - builtInRoles={builtInRoles} onChange={onProfileChange} /> )} diff --git a/public/app/features/serviceaccounts/ServiceAccountsListPage.test.tsx b/public/app/features/serviceaccounts/ServiceAccountsListPage.test.tsx index 59a66ade42a..632c9126c8e 100644 --- a/public/app/features/serviceaccounts/ServiceAccountsListPage.test.tsx +++ b/public/app/features/serviceaccounts/ServiceAccountsListPage.test.tsx @@ -26,7 +26,6 @@ const setup = (propOverrides: Partial) => { const getApiKeysMigrationInfoMock = jest.fn(); const closeApiKeysMigrationInfoMock = jest.fn(); const props: Props = { - builtInRoles: {}, isLoading: false, page: 0, perPage: 10, diff --git a/public/app/features/serviceaccounts/ServiceAccountsListPage.tsx b/public/app/features/serviceaccounts/ServiceAccountsListPage.tsx index aeb50c52c30..9cd3b81bcce 100644 --- a/public/app/features/serviceaccounts/ServiceAccountsListPage.tsx +++ b/public/app/features/serviceaccounts/ServiceAccountsListPage.tsx @@ -55,7 +55,6 @@ export const ServiceAccountsListPageUnconnected = ({ serviceAccounts, isLoading, roleOptions, - builtInRoles, query, serviceAccountStateFilter, apiKeysMigrated, @@ -268,7 +267,6 @@ export const ServiceAccountsListPageUnconnected = ({ ; onChange: (serviceAccount: ServiceAccountDTO) => void; } -export function ServiceAccountProfile({ - serviceAccount, - timeZone, - roleOptions, - builtInRoles, - onChange, -}: Props): JSX.Element { +export function ServiceAccountProfile({ serviceAccount, timeZone, roleOptions, onChange }: Props): JSX.Element { const styles = useStyles2(getStyles); const ableToWrite = contextSrv.hasPermission(AccessControlAction.ServiceAccountsWrite); @@ -51,7 +44,6 @@ export function ServiceAccountProfile({ label="Roles" serviceAccount={serviceAccount} onRoleChange={onRoleChange} - builtInRoles={builtInRoles} roleOptions={roleOptions} /> void; roleOptions: Role[]; - builtInRoles: Record; } -export const ServiceAccountRoleRow = ({ - label, - serviceAccount, - roleOptions, - builtInRoles, - onRoleChange, -}: Props): JSX.Element => { +export const ServiceAccountRoleRow = ({ label, serviceAccount, roleOptions, onRoleChange }: Props): JSX.Element => { const inputId = `${label}-input`; const canUpdateRole = contextSrv.hasPermissionInMetadata(AccessControlAction.ServiceAccountsWrite, serviceAccount); @@ -34,11 +27,10 @@ export const ServiceAccountRoleRow = ({ diff --git a/public/app/features/serviceaccounts/components/ServiceAccountsListItem.tsx b/public/app/features/serviceaccounts/components/ServiceAccountsListItem.tsx index 44594e73e2c..b8cc616fe9a 100644 --- a/public/app/features/serviceaccounts/components/ServiceAccountsListItem.tsx +++ b/public/app/features/serviceaccounts/components/ServiceAccountsListItem.tsx @@ -12,7 +12,6 @@ type ServiceAccountListItemProps = { serviceAccount: ServiceAccountDTO; onRoleChange: (role: OrgRole, serviceAccount: ServiceAccountDTO) => void; roleOptions: Role[]; - builtInRoles: Record; onRemoveButtonClick: (serviceAccount: ServiceAccountDTO) => void; onDisable: (serviceAccount: ServiceAccountDTO) => void; onEnable: (serviceAccount: ServiceAccountDTO) => void; @@ -28,7 +27,6 @@ const ServiceAccountListItem = memo( serviceAccount, onRoleChange, roleOptions, - builtInRoles, onRemoveButtonClick, onDisable, onEnable, @@ -78,11 +76,10 @@ const ServiceAccountListItem = memo( onRoleChange(newRole, serviceAccount)} + basicRole={serviceAccount.role} + onBasicRoleChange={(newRole) => onRoleChange(newRole, serviceAccount)} roleOptions={roleOptions} - builtInRoles={builtInRoles} - builtinRolesDisabled={!canUpdateRole} + basicRoleDisabled={!canUpdateRole} disabled={serviceAccount.isDisabled} /> )} diff --git a/public/app/features/serviceaccounts/state/actions.ts b/public/app/features/serviceaccounts/state/actions.ts index 3058878eddc..74e280f0c5e 100644 --- a/public/app/features/serviceaccounts/state/actions.ts +++ b/public/app/features/serviceaccounts/state/actions.ts @@ -1,7 +1,7 @@ import { debounce } from 'lodash'; import { getBackendSrv } from '@grafana/runtime'; -import { fetchBuiltinRoles, fetchRoleOptions } from 'app/core/components/RolePicker/api'; +import { fetchRoleOptions } from 'app/core/components/RolePicker/api'; import { contextSrv } from 'app/core/services/context_srv'; import store from 'app/core/store'; import { AccessControlAction, ServiceAccountDTO, ServiceAccountStateFilter, ThunkResult } from 'app/types'; @@ -11,7 +11,6 @@ import { API_KEYS_MIGRATION_INFO_STORAGE_KEY } from '../constants'; import { acOptionsLoaded, - builtInRolesLoaded, pageChanged, queryChanged, serviceAccountsFetchBegin, @@ -31,14 +30,6 @@ export function fetchACOptions(): ThunkResult { const options = await fetchRoleOptions(); dispatch(acOptionsLoaded(options)); } - if ( - contextSrv.accessControlBuiltInRoleAssignmentEnabled() && - contextSrv.licensedAccessControlEnabled() && - contextSrv.hasPermission(AccessControlAction.ActionBuiltinRolesList) - ) { - const builtInRoles = await fetchBuiltinRoles(); - dispatch(builtInRolesLoaded(builtInRoles)); - } } catch (error) { console.error(error); } diff --git a/public/app/features/serviceaccounts/state/reducers.ts b/public/app/features/serviceaccounts/state/reducers.ts index ad03360aeed..b87855e1f0c 100644 --- a/public/app/features/serviceaccounts/state/reducers.ts +++ b/public/app/features/serviceaccounts/state/reducers.ts @@ -43,7 +43,6 @@ export const { serviceAccountLoaded, serviceAccountTokensLoaded, serviceAccountF export const initialStateList: ServiceAccountsState = { serviceAccounts: [] as ServiceAccountDTO[], isLoading: true, - builtInRoles: {}, roleOptions: [], query: '', page: 0, @@ -88,9 +87,6 @@ const serviceAccountsSlice = createSlice({ acOptionsLoaded: (state, action: PayloadAction): ServiceAccountsState => { return { ...state, roleOptions: action.payload }; }, - builtInRolesLoaded: (state, action: PayloadAction>): ServiceAccountsState => { - return { ...state, builtInRoles: action.payload }; - }, apiKeysMigrationStatusLoaded: (state, action): ServiceAccountsState => { return { ...state, apiKeysMigrated: action.payload }; }, @@ -121,7 +117,6 @@ export const { serviceAccountsFetchEnd, serviceAccountsFetched, acOptionsLoaded, - builtInRolesLoaded, apiKeysMigrationStatusLoaded, showApiKeysMigrationInfoLoaded, pageChanged, diff --git a/public/app/features/users/UsersTable.tsx b/public/app/features/users/UsersTable.tsx index 327a9282399..0c9694cbbb1 100644 --- a/public/app/features/users/UsersTable.tsx +++ b/public/app/features/users/UsersTable.tsx @@ -3,7 +3,7 @@ import React, { FC, useEffect, useState } from 'react'; import { OrgRole } from '@grafana/data'; import { Button, ConfirmModal } from '@grafana/ui'; import { UserRolePicker } from 'app/core/components/RolePicker/UserRolePicker'; -import { fetchBuiltinRoles, fetchRoleOptions } from 'app/core/components/RolePicker/api'; +import { fetchRoleOptions } from 'app/core/components/RolePicker/api'; import { contextSrv } from 'app/core/core'; import { AccessControlAction, OrgUser, Role } from 'app/types'; @@ -20,7 +20,6 @@ const UsersTable: FC = (props) => { const { users, orgId, onRoleChange, onRemoveUser } = props; const [userToRemove, setUserToRemove] = useState(null); const [roleOptions, setRoleOptions] = useState([]); - const [builtinRoles, setBuiltinRoles] = useState<{ [key: string]: Role[] }>({}); useEffect(() => { async function fetchOptions() { @@ -29,14 +28,6 @@ const UsersTable: FC = (props) => { let options = await fetchRoleOptions(orgId); setRoleOptions(options); } - - if ( - contextSrv.accessControlBuiltInRoleAssignmentEnabled() && - contextSrv.hasPermission(AccessControlAction.ActionBuiltinRolesList) - ) { - const builtInRoles = await fetchBuiltinRoles(orgId); - setBuiltinRoles(builtInRoles); - } } catch (e) { console.error('Error loading options'); } @@ -92,12 +83,9 @@ const UsersTable: FC = (props) => { userId={user.userId} orgId={orgId} roleOptions={roleOptions} - builtInRoles={builtinRoles} - builtInRole={user.role} - onBuiltinRoleChange={(newRole) => onRoleChange(newRole, user)} - builtinRolesDisabled={ - !contextSrv.hasPermissionInMetadata(AccessControlAction.OrgUsersWrite, user) - } + basicRole={user.role} + onBasicRoleChange={(newRole) => onRoleChange(newRole, user)} + basicRoleDisabled={!contextSrv.hasPermissionInMetadata(AccessControlAction.OrgUsersWrite, user)} /> ) : ( ; apiKeysMigrated: boolean; showApiKeysMigrationInfo: boolean;