users.service.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. import {
  2. CreateUserReq,
  3. UpdateUserReq,
  4. DeleteUserReq,
  5. CreateRoleReq,
  6. DropRoleReq,
  7. AddUserToRoleReq,
  8. RemoveUserFromRoleReq,
  9. HasRoleReq,
  10. listRoleReq,
  11. SelectUserReq,
  12. ListGrantsReq,
  13. OperateRolePrivilegeReq,
  14. } from '@zilliz/milvus2-sdk-node';
  15. import { throwErrorFromSDK } from '../utils/Error';
  16. import {
  17. Privileges,
  18. GlobalPrivileges,
  19. CollectionPrivileges,
  20. UserPrivileges,
  21. RbacObjects,
  22. } from '../utils';
  23. import { clientCache } from '../app';
  24. export class UserService {
  25. async getUsers(clientId: string) {
  26. const { milvusClient } = clientCache.get(clientId);
  27. const res = await milvusClient.listUsers();
  28. throwErrorFromSDK(res.status);
  29. return res;
  30. }
  31. async createUser(clientId: string, data: CreateUserReq) {
  32. const { milvusClient } = clientCache.get(clientId);
  33. const res = await milvusClient.createUser(data);
  34. throwErrorFromSDK(res);
  35. return res;
  36. }
  37. async updateUser(clientId: string, data: UpdateUserReq) {
  38. const { milvusClient } = clientCache.get(clientId);
  39. const res = await milvusClient.updateUser(data);
  40. throwErrorFromSDK(res);
  41. return res;
  42. }
  43. async deleteUser(clientId: string, data: DeleteUserReq) {
  44. const { milvusClient } = clientCache.get(clientId);
  45. const res = await milvusClient.deleteUser(data);
  46. throwErrorFromSDK(res);
  47. return res;
  48. }
  49. async getRoles(clientId: string, data?: listRoleReq) {
  50. const { milvusClient } = clientCache.get(clientId);
  51. const res = await milvusClient.listRoles(data);
  52. throwErrorFromSDK(res.status);
  53. return res;
  54. }
  55. async selectUser(clientId: string, data?: SelectUserReq) {
  56. const { milvusClient } = clientCache.get(clientId);
  57. const res = await milvusClient.selectUser(data);
  58. throwErrorFromSDK(res.status);
  59. return res;
  60. }
  61. async createRole(clientId: string, data: CreateRoleReq) {
  62. const { milvusClient } = clientCache.get(clientId);
  63. const res = await milvusClient.createRole(data);
  64. throwErrorFromSDK(res);
  65. return res;
  66. }
  67. async deleteRole(clientId: string, data: DropRoleReq) {
  68. const { milvusClient } = clientCache.get(clientId);
  69. const res = await milvusClient.dropRole(data);
  70. throwErrorFromSDK(res);
  71. return res;
  72. }
  73. async assignUserRole(clientId: string, data: AddUserToRoleReq) {
  74. const { milvusClient } = clientCache.get(clientId);
  75. const res = await milvusClient.addUserToRole(data);
  76. throwErrorFromSDK(res);
  77. return res;
  78. }
  79. async unassignUserRole(clientId: string, data: RemoveUserFromRoleReq) {
  80. const { milvusClient } = clientCache.get(clientId);
  81. const res = await milvusClient.removeUserFromRole(data);
  82. throwErrorFromSDK(res);
  83. return res;
  84. }
  85. async hasRole(clientId: string, data: HasRoleReq) {
  86. const { milvusClient } = clientCache.get(clientId);
  87. const res = await milvusClient.hasRole(data);
  88. throwErrorFromSDK(res.status);
  89. return res;
  90. }
  91. async getRBAC() {
  92. return {
  93. Privileges,
  94. GlobalPrivileges,
  95. CollectionPrivileges,
  96. UserPrivileges,
  97. RbacObjects,
  98. };
  99. }
  100. async listGrants(clientId: string, data: ListGrantsReq) {
  101. const { milvusClient } = clientCache.get(clientId);
  102. const res = await milvusClient.listGrants(data);
  103. throwErrorFromSDK(res.status);
  104. return res;
  105. }
  106. async grantRolePrivilege(clientId: string, data: OperateRolePrivilegeReq) {
  107. const { milvusClient } = clientCache.get(clientId);
  108. const res = await milvusClient.grantRolePrivilege(data);
  109. throwErrorFromSDK(res);
  110. return res;
  111. }
  112. async revokeRolePrivilege(clientId: string, data: OperateRolePrivilegeReq) {
  113. const { milvusClient } = clientCache.get(clientId);
  114. const res = await milvusClient.revokeRolePrivilege(data);
  115. throwErrorFromSDK(res);
  116. return res;
  117. }
  118. async revokeAllRolePrivileges(clientId: string, data: { roleName: string }) {
  119. // get existing privileges
  120. const existingPrivileges = await this.listGrants(clientId, {
  121. roleName: data.roleName,
  122. });
  123. // revoke all
  124. for (let i = 0; i < existingPrivileges.entities.length; i++) {
  125. const res = existingPrivileges.entities[i];
  126. await this.revokeRolePrivilege(clientId, {
  127. object: res.object.name,
  128. objectName: res.object_name,
  129. privilegeName: res.grantor.privilege.name,
  130. roleName: res.role.name,
  131. });
  132. }
  133. }
  134. }