w-web-perm
Version:
A web service for permissions.
97 lines (76 loc) • 2.47 kB
JavaScript
import axios from 'axios'
import get from 'lodash-es/get.js'
import isestr from 'wsemi/src/isestr.mjs'
import iseobj from 'wsemi/src/iseobj.mjs'
import isfun from 'wsemi/src/isfun.mjs'
import ispm from 'wsemi/src/ispm.mjs'
async function getPerm(url, tokenTar, opt = {}) {
//url: http://localhost:11006/api/getPerm?token={token}
let errTemp = null
//check
if (!isestr(url)) {
return Promise.reject('invalid url')
}
if (!isestr(tokenTar)) {
return Promise.reject('invalid tokenTar')
}
//funConvertPerm
let funConvertPerm = get(opt, 'funConvertPerm')
//url
if (url.indexOf('token={token}') < 0) {
return Promise.reject(`no 'token={token}' in url`)
}
url = url.replaceAll('{token}', tokenTar)
// console.log('getPerm: url', url)
//get
let res = await axios.get(url)
.catch((err) => {
errTemp = err.toString()
})
//check
if (errTemp !== null) {
console.log('res', res)
console.log('errTemp', errTemp)
console.log(`can not get user by url[${url}]`)
return Promise.reject(`can not get user by url[${url}]`) //由SSO取得使用者資訊錯誤
}
//data
let data = get(res, 'data')
//state
let state = get(data, 'state', '')
//msg
let msg = get(data, 'msg')
//check
if (state !== 'success') {
console.log('res', res)
console.log('data', data)
console.log('state', state)
console.log('errTemp', msg)
console.log(`can not get user data by url[${url}]`)
return Promise.reject(`can not get user data by url[${url}]`) //取得使用者資訊失敗
}
//ur
let ur = msg
// console.log('getPerm ur(msg)', ur)
//check
if (!iseobj(ur)) {
console.log(`no user data by url[${url}]`)
return Promise.reject(`no user data by url[${url}]`)
}
//check
if (isfun(funConvertPerm)) {
//funConvertPerm
ur = funConvertPerm(ur)
if (ispm(ur)) {
ur = await ur
}
// console.log('getPerm ur(funConvertPerm)', ur)
//check
if (!iseobj(ur)) {
console.log(`no user data after funConvertPerm`)
return Promise.reject(`no user data after funConvertPerm`)
}
}
return ur
}
export default getPerm