mirror of
https://github.com/grafana/grafana.git
synced 2025-02-14 17:43:35 -06:00
AccessControl: Make Permissions
component customizable (#43992)
* Setting default values for props Co-authored-by: Alex Khomenko <Clarity-89@users.noreply.github.com> * Using table instead Co-authored-by: Kalle Persson <kalle.persson@grafana.com>
This commit is contained in:
parent
e9f8b40e18
commit
fc405ea9da
@ -7,6 +7,7 @@ import { CloseButton } from 'app/core/components/CloseButton/CloseButton';
|
|||||||
import { Assignments, PermissionTarget, SetPermission } from './types';
|
import { Assignments, PermissionTarget, SetPermission } from './types';
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
|
title?: string;
|
||||||
permissions: string[];
|
permissions: string[];
|
||||||
assignments: Assignments;
|
assignments: Assignments;
|
||||||
canListUsers: boolean;
|
canListUsers: boolean;
|
||||||
@ -14,7 +15,14 @@ export interface Props {
|
|||||||
onAdd: (state: SetPermission) => void;
|
onAdd: (state: SetPermission) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const AddPermission = ({ permissions, assignments, canListUsers, onAdd, onCancel }: Props) => {
|
export const AddPermission = ({
|
||||||
|
title = 'Add Permission For',
|
||||||
|
permissions,
|
||||||
|
assignments,
|
||||||
|
canListUsers,
|
||||||
|
onAdd,
|
||||||
|
onCancel,
|
||||||
|
}: Props) => {
|
||||||
const [target, setPermissionTarget] = useState<PermissionTarget>(PermissionTarget.User);
|
const [target, setPermissionTarget] = useState<PermissionTarget>(PermissionTarget.User);
|
||||||
const [teamId, setTeamId] = useState(0);
|
const [teamId, setTeamId] = useState(0);
|
||||||
const [userId, setUserId] = useState(0);
|
const [userId, setUserId] = useState(0);
|
||||||
@ -49,7 +57,7 @@ export const AddPermission = ({ permissions, assignments, canListUsers, onAdd, o
|
|||||||
return (
|
return (
|
||||||
<div className="cta-form" aria-label="Permissions slider">
|
<div className="cta-form" aria-label="Permissions slider">
|
||||||
<CloseButton onClick={onCancel} />
|
<CloseButton onClick={onCancel} />
|
||||||
<h5>Add Permission For</h5>
|
<h5>{title}</h5>
|
||||||
<Form
|
<Form
|
||||||
name="addPermission"
|
name="addPermission"
|
||||||
maxWidth="none"
|
maxWidth="none"
|
||||||
|
@ -18,8 +18,16 @@ export const PermissionList = ({ title, items, permissionLevels, canSet, onRemov
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<h5>{title}</h5>
|
|
||||||
<table className="filter-table gf-form-group">
|
<table className="filter-table gf-form-group">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style={{ width: '1%' }} />
|
||||||
|
<th>{title}</th>
|
||||||
|
<th>Permission</th>
|
||||||
|
<th style={{ width: '1%' }} />
|
||||||
|
<th style={{ width: '1%' }} />
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{items.map((item, index) => (
|
{items.map((item, index) => (
|
||||||
<PermissionListItem
|
<PermissionListItem
|
||||||
|
@ -14,8 +14,6 @@ export const PermissionListItem = ({ item, permissionLevels, canSet, onRemove, o
|
|||||||
<tr>
|
<tr>
|
||||||
<td style={{ width: '1%' }}>{getAvatar(item)}</td>
|
<td style={{ width: '1%' }}>{getAvatar(item)}</td>
|
||||||
<td style={{ width: '90%' }}>{getDescription(item)}</td>
|
<td style={{ width: '90%' }}>{getDescription(item)}</td>
|
||||||
<td />
|
|
||||||
<td className="query-keyword">Can</td>
|
|
||||||
<td>
|
<td>
|
||||||
<div className="gf-form">
|
<div className="gf-form">
|
||||||
<Select
|
<Select
|
||||||
|
@ -20,6 +20,9 @@ const INITIAL_DESCRIPTION: Description = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export type Props = {
|
export type Props = {
|
||||||
|
title?: string;
|
||||||
|
buttonLabel?: string;
|
||||||
|
addPermissionTitle?: string;
|
||||||
resource: string;
|
resource: string;
|
||||||
resourceId: number;
|
resourceId: number;
|
||||||
|
|
||||||
@ -27,7 +30,15 @@ export type Props = {
|
|||||||
canSetPermissions: boolean;
|
canSetPermissions: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const Permissions = ({ resource, resourceId, canListUsers, canSetPermissions }: Props) => {
|
export const Permissions = ({
|
||||||
|
title = 'Permissions',
|
||||||
|
buttonLabel = 'Add a permission',
|
||||||
|
resource,
|
||||||
|
resourceId,
|
||||||
|
canListUsers,
|
||||||
|
canSetPermissions,
|
||||||
|
addPermissionTitle,
|
||||||
|
}: Props) => {
|
||||||
const [isAdding, setIsAdding] = useState(false);
|
const [isAdding, setIsAdding] = useState(false);
|
||||||
const [items, setItems] = useState<ResourcePermission[]>([]);
|
const [items, setItems] = useState<ResourcePermission[]>([]);
|
||||||
const [desc, setDesc] = useState(INITIAL_DESCRIPTION);
|
const [desc, setDesc] = useState(INITIAL_DESCRIPTION);
|
||||||
@ -114,11 +125,11 @@ export const Permissions = ({ resource, resourceId, canListUsers, canSetPermissi
|
|||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<div className="page-action-bar">
|
<div className="page-action-bar">
|
||||||
<h3 className="page-sub-heading">Permissions</h3>
|
<h3 className="page-sub-heading">{title}</h3>
|
||||||
<div className="page-action-bar__spacer" />
|
<div className="page-action-bar__spacer" />
|
||||||
{canSetPermissions && (
|
{canSetPermissions && (
|
||||||
<Button variant={'primary'} key="add-permission" onClick={() => setIsAdding(true)}>
|
<Button variant={'primary'} key="add-permission" onClick={() => setIsAdding(true)}>
|
||||||
Add a permission
|
{buttonLabel}
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
@ -126,6 +137,7 @@ export const Permissions = ({ resource, resourceId, canListUsers, canSetPermissi
|
|||||||
<div>
|
<div>
|
||||||
<SlideDown in={isAdding}>
|
<SlideDown in={isAdding}>
|
||||||
<AddPermission
|
<AddPermission
|
||||||
|
title={addPermissionTitle}
|
||||||
onAdd={onAdd}
|
onAdd={onAdd}
|
||||||
permissions={desc.permissions}
|
permissions={desc.permissions}
|
||||||
assignments={desc.assignments}
|
assignments={desc.assignments}
|
||||||
@ -134,7 +146,7 @@ export const Permissions = ({ resource, resourceId, canListUsers, canSetPermissi
|
|||||||
/>
|
/>
|
||||||
</SlideDown>
|
</SlideDown>
|
||||||
<PermissionList
|
<PermissionList
|
||||||
title="Roles"
|
title="Role"
|
||||||
items={builtInRoles}
|
items={builtInRoles}
|
||||||
permissionLevels={desc.permissions}
|
permissionLevels={desc.permissions}
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
@ -142,7 +154,7 @@ export const Permissions = ({ resource, resourceId, canListUsers, canSetPermissi
|
|||||||
canSet={canSetPermissions}
|
canSet={canSetPermissions}
|
||||||
/>
|
/>
|
||||||
<PermissionList
|
<PermissionList
|
||||||
title="Users"
|
title="User"
|
||||||
items={users}
|
items={users}
|
||||||
permissionLevels={desc.permissions}
|
permissionLevels={desc.permissions}
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
@ -150,7 +162,7 @@ export const Permissions = ({ resource, resourceId, canListUsers, canSetPermissi
|
|||||||
canSet={canSetPermissions}
|
canSet={canSetPermissions}
|
||||||
/>
|
/>
|
||||||
<PermissionList
|
<PermissionList
|
||||||
title="Teams"
|
title="Team"
|
||||||
items={teams}
|
items={teams}
|
||||||
permissionLevels={desc.permissions}
|
permissionLevels={desc.permissions}
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
@ -171,8 +183,8 @@ const getDescription = async (resource: string): Promise<Description> => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const getPermissions = (resource: string, datasourceId: number): Promise<ResourcePermission[]> =>
|
const getPermissions = (resource: string, resourceId: number): Promise<ResourcePermission[]> =>
|
||||||
getBackendSrv().get(`/api/access-control/${resource}/${datasourceId}`);
|
getBackendSrv().get(`/api/access-control/${resource}/${resourceId}`);
|
||||||
|
|
||||||
const setUserPermission = (resource: string, resourceId: number, userId: number, permission: string) =>
|
const setUserPermission = (resource: string, resourceId: number, userId: number, permission: string) =>
|
||||||
setPermission(resource, resourceId, 'users', userId, permission);
|
setPermission(resource, resourceId, 'users', userId, permission);
|
||||||
|
Loading…
Reference in New Issue
Block a user