UNPKG

cloud-admin-template

Version:
80 lines (76 loc) 2.26 kB
import authService from '@/global/services/auth'; import Vue from 'vue'; let userInfoPromise = null; let userResourcesPromise = null; const maxTimes = 3; const request = function (times) { return authService.GetUser({ config: { noErrorTip: true, }, }).then((result) => result.Data).catch((err) => { times--; if (times > 0) { return request(times); } else { throw err; } }); }; const auth = { _map: undefined, getUserInfo(times = 1) { if (!userInfoPromise) { userInfoPromise = request(times).then((userInfo) => { const $global = Vue.prototype.$global = Vue.prototype.$global || {}; $global.userInfo = userInfo; return userInfo; }).catch((e) => { userInfoPromise = undefined; throw e; }); } return userInfoPromise; }, getUserResources(DomainName) { if (!userResourcesPromise) { userResourcesPromise = authService.GetUserResources({ query: { DomainName, }, }).then((result) => { const resources = result.Data.items.filter((resource) => resource.ResourceType === 'ui'); // 初始化权限项 this._map = new Map(); resources.forEach((resource) => this._map.set(resource.ResourceValue, resource)); }).catch((e) => { // 获取权限异常 userResourcesPromise = undefined; }); } return userResourcesPromise; }, /** * 权限服务是否初始化 */ isInit() { return !!this._map; }, /** * 初始化权限服务 */ init(domainName, times) { return this.getUserInfo(times || maxTimes).then(() => this.getUserResources(domainName)); }, /** * 是否有权限 * @param {*} authPath 权限路径,如 /dashboard/entity/list */ has(authPath) { return this._map.has(authPath); }, }; export default auth; export const runAhead = function (domainName, times) { auth.init(domainName, times); };