| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- import React, { Component } from 'react';
- import PermissionsList from './PermissionsList';
- import { observer } from 'mobx-react';
- import UserPicker, { User } from 'app/core/components/Picker/UserPicker';
- import TeamPicker, { Team } from 'app/core/components/Picker/TeamPicker';
- import { aclTypes } from 'app/stores/PermissionsStore/PermissionsStore';
- import { FolderInfo } from './FolderInfo';
- 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;
- nameHtml?: string;
- inherited?: boolean;
- sortName?: string;
- sortRank?: number;
- }
- export interface IProps {
- dashboardId: number;
- folderInfo?: FolderInfo;
- permissions?: any;
- isFolder: boolean;
- backendSrv: any;
- }
- @observer
- class Permissions extends Component<IProps, any> {
- constructor(props) {
- super(props);
- const { dashboardId, isFolder } = this.props;
- this.permissionChanged = this.permissionChanged.bind(this);
- this.typeChanged = this.typeChanged.bind(this);
- this.removeItem = this.removeItem.bind(this);
- this.userPicked = this.userPicked.bind(this);
- this.teamPicked = this.teamPicked.bind(this);
- this.loadStore(dashboardId, isFolder);
- }
- loadStore(dashboardId, isFolder) {
- return this.props.permissions.load(dashboardId, isFolder);
- }
- permissionChanged(index: number, permission: number, permissionName: string) {
- const { permissions } = this.props;
- permissions.updatePermissionOnIndex(index, permission, permissionName);
- }
- removeItem(index: number) {
- const { permissions } = this.props;
- permissions.removeStoreItem(index);
- }
- resetNewType() {
- const { permissions } = this.props;
- permissions.resetNewType();
- }
- typeChanged(evt) {
- const { value } = evt.target;
- const { permissions, dashboardId } = this.props;
- if (value === 'Viewer' || value === 'Editor') {
- permissions.addStoreItem({ permission: 1, role: value, dashboardId: dashboardId }, dashboardId);
- this.resetNewType();
- return;
- }
- permissions.setNewType(value);
- }
- userPicked(user: User) {
- const { permissions } = this.props;
- return permissions.addStoreItem({ userId: user.id, userLogin: user.login, permission: 1 });
- }
- teamPicked(team: Team) {
- const { permissions } = this.props;
- return permissions.addStoreItem({ teamId: team.id, team: team.name, permission: 1 });
- }
- render() {
- const { permissions, folderInfo, backendSrv } = this.props;
- return (
- <div className="gf-form-group">
- <PermissionsList
- permissions={permissions.items}
- removeItem={this.removeItem}
- permissionChanged={this.permissionChanged}
- fetching={permissions.fetching}
- folderInfo={folderInfo}
- />
- <div className="gf-form-inline">
- <form name="addPermission" className="gf-form-group">
- <h6 className="muted">Add Permission For</h6>
- <div className="gf-form-inline">
- <div className="gf-form">
- <div className="gf-form-select-wrapper">
- <select
- className="gf-form-input gf-size-auto"
- value={permissions.newType}
- onChange={this.typeChanged}
- >
- {aclTypes.map((option, idx) => {
- return (
- <option key={idx} value={option.value}>
- {option.text}
- </option>
- );
- })}
- </select>
- </div>
- </div>
- {permissions.newType === 'User' ? (
- <div className="gf-form">
- <UserPicker backendSrv={backendSrv} handlePicked={this.userPicked} />
- </div>
- ) : null}
- {permissions.newType === 'Group' ? (
- <div className="gf-form">
- <TeamPicker backendSrv={backendSrv} handlePicked={this.teamPicked} />
- </div>
- ) : null}
- </div>
- </form>
- {permissions.error ? (
- <div className="gf-form width-17">
- <span ng-if="ctrl.error" className="text-error p-l-1">
- <i className="fa fa-warning" />
- {permissions.error}
- </span>
- </div>
- ) : null}
- </div>
- </div>
- );
- }
- }
- export default Permissions;
|