Permissions.tsx 4.5 KB

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