Permissions.tsx 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. import React, { Component } from 'react';
  2. import PermissionsList from './PermissionsList';
  3. import { observer } from 'mobx-react';
  4. import UserPicker, { User } from 'app/core/components/Picker/UserPicker';
  5. import TeamPicker, { Team } from 'app/core/components/Picker/TeamPicker';
  6. import { aclTypes } from 'app/stores/PermissionsStore/PermissionsStore';
  7. import { FolderInfo } from './FolderInfo';
  8. export interface DashboardAcl {
  9. id?: number;
  10. dashboardId?: number;
  11. userId?: number;
  12. userLogin?: string;
  13. userEmail?: string;
  14. teamId?: number;
  15. team?: string;
  16. permission?: number;
  17. permissionName?: string;
  18. role?: string;
  19. icon?: string;
  20. nameHtml?: string;
  21. inherited?: boolean;
  22. sortName?: string;
  23. sortRank?: number;
  24. }
  25. export interface IProps {
  26. dashboardId: number;
  27. folderInfo?: FolderInfo;
  28. permissions?: any;
  29. isFolder: boolean;
  30. backendSrv: any;
  31. }
  32. @observer
  33. class Permissions extends Component<IProps, any> {
  34. constructor(props) {
  35. super(props);
  36. const { dashboardId, isFolder } = this.props;
  37. this.permissionChanged = this.permissionChanged.bind(this);
  38. this.typeChanged = this.typeChanged.bind(this);
  39. this.removeItem = this.removeItem.bind(this);
  40. this.userPicked = this.userPicked.bind(this);
  41. this.teamPicked = this.teamPicked.bind(this);
  42. this.loadStore(dashboardId, isFolder);
  43. }
  44. loadStore(dashboardId, isFolder) {
  45. return this.props.permissions.load(dashboardId, isFolder);
  46. }
  47. permissionChanged(index: number, permission: number, permissionName: string) {
  48. const { permissions } = this.props;
  49. permissions.updatePermissionOnIndex(index, permission, permissionName);
  50. }
  51. removeItem(index: number) {
  52. const { permissions } = this.props;
  53. permissions.removeStoreItem(index);
  54. }
  55. resetNewType() {
  56. const { permissions } = this.props;
  57. permissions.resetNewType();
  58. }
  59. typeChanged(evt) {
  60. const { value } = evt.target;
  61. const { permissions, dashboardId } = this.props;
  62. if (value === 'Viewer' || value === 'Editor') {
  63. permissions.addStoreItem({ permission: 1, role: value, dashboardId: dashboardId }, dashboardId);
  64. this.resetNewType();
  65. return;
  66. }
  67. permissions.setNewType(value);
  68. }
  69. userPicked(user: User) {
  70. const { permissions } = this.props;
  71. return permissions.addStoreItem({ userId: user.id, userLogin: user.login, permission: 1 });
  72. }
  73. teamPicked(team: Team) {
  74. const { permissions } = this.props;
  75. return permissions.addStoreItem({ teamId: team.id, team: team.name, permission: 1 });
  76. }
  77. render() {
  78. const { permissions, folderInfo, backendSrv } = this.props;
  79. return (
  80. <div className="gf-form-group">
  81. <PermissionsList
  82. permissions={permissions.items}
  83. removeItem={this.removeItem}
  84. permissionChanged={this.permissionChanged}
  85. fetching={permissions.fetching}
  86. folderInfo={folderInfo}
  87. />
  88. <div className="gf-form-inline">
  89. <form name="addPermission" className="gf-form-group">
  90. <h6 className="muted">Add Permission For</h6>
  91. <div className="gf-form-inline">
  92. <div className="gf-form">
  93. <div className="gf-form-select-wrapper">
  94. <select
  95. className="gf-form-input gf-size-auto"
  96. value={permissions.newType}
  97. onChange={this.typeChanged}
  98. >
  99. {aclTypes.map((option, idx) => {
  100. return (
  101. <option key={idx} value={option.value}>
  102. {option.text}
  103. </option>
  104. );
  105. })}
  106. </select>
  107. </div>
  108. </div>
  109. {permissions.newType === 'User' ? (
  110. <div className="gf-form">
  111. <UserPicker backendSrv={backendSrv} handlePicked={this.userPicked} />
  112. </div>
  113. ) : null}
  114. {permissions.newType === 'Group' ? (
  115. <div className="gf-form">
  116. <TeamPicker backendSrv={backendSrv} handlePicked={this.teamPicked} />
  117. </div>
  118. ) : null}
  119. </div>
  120. </form>
  121. {permissions.error ? (
  122. <div className="gf-form width-17">
  123. <span ng-if="ctrl.error" className="text-error p-l-1">
  124. <i className="fa fa-warning" />
  125. {permissions.error}
  126. </span>
  127. </div>
  128. ) : null}
  129. </div>
  130. </div>
  131. );
  132. }
  133. }
  134. export default Permissions;