scopedPolicy.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import * as R from 'ramda'
  2. import Vue from 'vue'
  3. import http from '@/utils/http'
  4. export default {
  5. state: {},
  6. mutations: {
  7. SET_DATA (state, { name, data }) {
  8. Vue.set(state, name, data)
  9. },
  10. DEL_DATA (state, { name }) {
  11. Vue.delete(state, name)
  12. },
  13. },
  14. actions: {
  15. async get ({ commit, rootGetters }, { category, onFinally }) {
  16. try {
  17. const categories = R.is(String, category) ? [category] : category
  18. if (rootGetters.scope) {
  19. const response = await http.get('/v1/auth/scopedpolicybindings', {
  20. params: {
  21. scope: rootGetters.scope,
  22. effective: true,
  23. category: categories,
  24. ignoreErrorStatusCode: [403],
  25. },
  26. })
  27. const data = response.data.data
  28. if (data && data.length) {
  29. for (let i = 0, len = data.length; i < len; i++) {
  30. const item = data[i]
  31. commit('SET_DATA', {
  32. name: item.category,
  33. data: item.policy,
  34. })
  35. }
  36. }
  37. // 如果没有请求到相关信息,那么也应该把对应缓存的信息清除掉
  38. for (let i = 0, len = categories.length; i < len; i++) {
  39. const item = categories[i]
  40. const obj = R.find(R.propEq('category', item))(data)
  41. if (R.isNil(obj)) {
  42. commit('DEL_DATA', {
  43. name: item,
  44. })
  45. }
  46. }
  47. return response
  48. } else {
  49. return {}
  50. }
  51. } finally {
  52. onFinally && onFinally()
  53. }
  54. },
  55. },
  56. }