2018-02-01 14:02:14 +01:00
|
|
|
import React, { Component } from 'react';
|
2018-01-11 10:47:39 +01:00
|
|
|
import PermissionsList from './PermissionsList';
|
2018-01-18 15:49:15 +01:00
|
|
|
import { observer } from 'mobx-react';
|
2018-01-29 16:08:48 +01:00
|
|
|
import { FolderInfo } from './FolderInfo';
|
2018-01-29 14:46:56 +01:00
|
|
|
|
2018-01-11 10:47:39 +01:00
|
|
|
export interface DashboardAcl {
|
|
|
|
|
id?: number;
|
|
|
|
|
dashboardId?: number;
|
|
|
|
|
userId?: number;
|
|
|
|
|
userLogin?: string;
|
|
|
|
|
userEmail?: string;
|
|
|
|
|
teamId?: number;
|
|
|
|
|
team?: string;
|
|
|
|
|
permission?: number;
|
|
|
|
|
permissionName?: string;
|
|
|
|
|
role?: string;
|
|
|
|
|
icon?: string;
|
2018-02-14 15:02:42 +01:00
|
|
|
name?: string;
|
2018-01-11 10:47:39 +01:00
|
|
|
inherited?: boolean;
|
|
|
|
|
sortRank?: number;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface IProps {
|
|
|
|
|
dashboardId: number;
|
2018-01-29 16:08:48 +01:00
|
|
|
folderInfo?: FolderInfo;
|
2018-01-17 09:24:35 +01:00
|
|
|
permissions?: any;
|
2018-01-16 11:28:14 +01:00
|
|
|
isFolder: boolean;
|
2018-01-17 16:13:45 +01:00
|
|
|
backendSrv: any;
|
2018-01-11 10:47:39 +01:00
|
|
|
}
|
|
|
|
|
|
2018-01-11 18:14:56 +01:00
|
|
|
@observer
|
2018-01-17 09:29:58 +01:00
|
|
|
class Permissions extends Component<IProps, any> {
|
2018-01-11 10:47:39 +01:00
|
|
|
constructor(props) {
|
|
|
|
|
super(props);
|
2018-01-31 15:34:05 +01:00
|
|
|
const { dashboardId, isFolder, folderInfo } = this.props;
|
2018-01-11 10:47:39 +01:00
|
|
|
this.permissionChanged = this.permissionChanged.bind(this);
|
2018-01-11 18:14:56 +01:00
|
|
|
this.typeChanged = this.typeChanged.bind(this);
|
|
|
|
|
this.removeItem = this.removeItem.bind(this);
|
2018-01-31 15:34:05 +01:00
|
|
|
this.loadStore(dashboardId, isFolder, folderInfo && folderInfo.id === 0);
|
2018-01-26 14:02:22 +01:00
|
|
|
}
|
|
|
|
|
|
2018-01-31 15:34:05 +01:00
|
|
|
loadStore(dashboardId, isFolder, isInRoot = false) {
|
|
|
|
|
return this.props.permissions.load(dashboardId, isFolder, isInRoot);
|
2018-01-11 10:47:39 +01:00
|
|
|
}
|
|
|
|
|
|
2018-01-15 21:12:46 +01:00
|
|
|
permissionChanged(index: number, permission: number, permissionName: string) {
|
|
|
|
|
const { permissions } = this.props;
|
|
|
|
|
permissions.updatePermissionOnIndex(index, permission, permissionName);
|
2018-01-11 10:47:39 +01:00
|
|
|
}
|
|
|
|
|
|
2018-01-15 21:12:46 +01:00
|
|
|
removeItem(index: number) {
|
2018-01-11 18:14:56 +01:00
|
|
|
const { permissions } = this.props;
|
|
|
|
|
permissions.removeStoreItem(index);
|
2018-01-11 10:47:39 +01:00
|
|
|
}
|
|
|
|
|
|
2018-01-11 18:14:56 +01:00
|
|
|
resetNewType() {
|
2018-01-18 21:24:55 +01:00
|
|
|
const { permissions } = this.props;
|
|
|
|
|
permissions.resetNewType();
|
2018-01-11 18:14:56 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
typeChanged(evt) {
|
|
|
|
|
const { value } = evt.target;
|
2018-01-16 09:45:22 +01:00
|
|
|
const { permissions, dashboardId } = this.props;
|
2018-01-15 21:12:46 +01:00
|
|
|
|
|
|
|
|
if (value === 'Viewer' || value === 'Editor') {
|
2018-01-16 09:45:22 +01:00
|
|
|
permissions.addStoreItem({ permission: 1, role: value, dashboardId: dashboardId }, dashboardId);
|
2018-01-15 21:12:46 +01:00
|
|
|
this.resetNewType();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2018-01-18 21:24:55 +01:00
|
|
|
permissions.setNewType(value);
|
2018-01-11 18:14:56 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
render() {
|
2018-01-31 10:39:38 +01:00
|
|
|
const { permissions, folderInfo } = this.props;
|
2018-01-11 10:47:39 +01:00
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div className="gf-form-group">
|
|
|
|
|
<PermissionsList
|
2018-01-15 21:12:46 +01:00
|
|
|
permissions={permissions.items}
|
2018-01-11 10:47:39 +01:00
|
|
|
removeItem={this.removeItem}
|
|
|
|
|
permissionChanged={this.permissionChanged}
|
2018-01-15 21:12:46 +01:00
|
|
|
fetching={permissions.fetching}
|
2018-01-29 16:08:48 +01:00
|
|
|
folderInfo={folderInfo}
|
2018-01-11 10:47:39 +01:00
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default Permissions;
|