From 3eaacbbf18914c2edf84d1f997798250d7c9b803 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E8=99=B9=E7=9D=BF?= <297504645@qq.com> Date: Thu, 7 Sep 2023 13:41:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=83=E9=99=90=E9=85=8D=E7=BD=AE=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=BC=80=E5=8F=91+=E5=A4=96=E9=93=BE=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E6=B2=A1=E6=9C=89=E5=AF=86=E7=A0=81=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Code/Fe/public/config.js | 3 + Code/Fe/src/App.vue | 2 + Code/Fe/src/api/wms-auth.js | 112 +- Code/Fe/src/permission.js | 97 +- Code/Fe/src/store/modules/definition.js | 7 + Code/Fe/src/store/modules/permission.js | 18 +- Code/Fe/src/store/modules/user.js | 100 +- .../views/menuList/AbpIdentityMarkRoles.vue | 1182 +++++++---------- 8 files changed, 733 insertions(+), 788 deletions(-) diff --git a/Code/Fe/public/config.js b/Code/Fe/public/config.js index 1a6f283..aa47ca4 100644 --- a/Code/Fe/public/config.js +++ b/Code/Fe/public/config.js @@ -2,11 +2,14 @@ window.SITE_CONFIG['baseApi'] = 'http://dev.ccwin-in.com:60068' // window.SITE_CONFIG['baseApi'] = 'http://192.168.0.190:60068' window.SITE_CONFIG['authApi'] = 'http://dev.ccwin-in.com:60068' +window.SITE_CONFIG['loginApi'] = 'http://dev.ccwin-in.com:60065' window.SITE_CONFIG['businessApi'] = 'http://dev.ccwin-in.com:10097' //是否登录配置信息【loginName】 window.SITE_CONFIG['isConfigLogin'] = false //如果【isConfigLogin】为true则使用【loginName】登录 window.SITE_CONFIG['configLoginName'] = 'admin' +// 默认登录密码(isConfigLogin为true或者链接参数存在loginName使用) +window.SITE_CONFIG['configLoginPass'] = '1q2w3E*' // 是否单页面(不显示菜单头部等部分) window.SITE_CONFIG['isSinglePage'] = false // 项目配置 diff --git a/Code/Fe/src/App.vue b/Code/Fe/src/App.vue index 0c7f200..e65feba 100644 --- a/Code/Fe/src/App.vue +++ b/Code/Fe/src/App.vue @@ -10,10 +10,12 @@ export default { } localStorage.setItem('baseApi',window.SITE_CONFIG['baseApi']) localStorage.setItem('authApi',window.SITE_CONFIG['authApi']) +localStorage.setItem('loginApi',window.SITE_CONFIG['loginApi']) localStorage.setItem('userApi',window.SITE_CONFIG['userApi']) localStorage.setItem('businessApi',window.SITE_CONFIG['businessApi']) localStorage.setItem('isConfigLogin',window.SITE_CONFIG['isConfigLogin']) localStorage.setItem('configLoginName',window.SITE_CONFIG['configLoginName']) +localStorage.setItem('configLoginPass',window.SITE_CONFIG['configLoginPass']) localStorage.setItem('isSinglePage',window.SITE_CONFIG['isSinglePage']) localStorage.setItem('appClientId',window.SITE_CONFIG['appClientId']) localStorage.setItem('appClientScope',window.SITE_CONFIG['appClientScope']) diff --git a/Code/Fe/src/api/wms-auth.js b/Code/Fe/src/api/wms-auth.js index 19e25f1..0fb286b 100644 --- a/Code/Fe/src/api/wms-auth.js +++ b/Code/Fe/src/api/wms-auth.js @@ -1,13 +1,6 @@ import request from '@/utils/request' let authApi = localStorage.getItem('authApi') + '/api' - -export function login(data) { - return request({ - url: authApi + '/account/login', - method: 'post', - data - }) -} +let loginApi = localStorage.getItem('loginApi') export function logout() { return request({ @@ -18,10 +11,19 @@ export function logout() { // faster-new +// 登录 +export function login(data) { + return request({ + url: loginApi + '/CustAccount/login', + method: 'post', + data + }) +} + // 获取token export function token(data) { return request({ - url: localStorage.getItem('authApi') + '/connect/token', + url: authApi + '/connect/token', method: 'post', headers: { 'Content-Type': 'application/x-www-form-urlencoded' @@ -30,10 +32,10 @@ export function token(data) { }) } -// 获取用户信息(单点登录) +// 通过token获取用户信息(单点登录) export function getUsersByToken(token) { return request({ - url: localStorage.getItem('oidcLogin_url') + '/connect/userinfo', + url: loginApi + '/connect/userinfo', method: 'get', Token:token }) @@ -78,7 +80,7 @@ export async function getApiDefinition() { }) } -// *************权限页面维护************* +// *************权限Roles页面维护************* //获取列表 export function getPageListRoles(data) { return request({ @@ -106,6 +108,23 @@ export function postCreateRoles(data) { }) } +//编辑角色 +export function postUpdateRoles(data, id) { + return request({ + url: authApi+'/identity/roles/' + id, + method: 'put', + data + }) +} + +//删除角色 +export function postDeleteRoles(id) { + return request({ + url: authApi + '/identity/roles/' + id, + method: 'delete', + }) +} + //保存权限模板 export function savePermissionsRoles(URL, data) { return request({ @@ -114,3 +133,72 @@ export function savePermissionsRoles(URL, data) { data }) } + +// 更新权限 +export function updatePermissionsGranted(pname,pkey) { + return request({ + url: authApi + `/permissions/get-isGranted?name=demox&providerName=${pname}&providerKey=${pkey}`, + method: 'post', + }) +} + +// *************用户Users页面维护************* + +//获取全部用户信息 +export function getPageListUsers(data) { + return request({ + url: authApi + '/identity/users', + method: 'get', + params: data + }) +} + +//新建用户 +export function postCreateUser(data) { + return request({ + url: authApi + '/identity/users', + method: 'post', + data + }) +} + +//编辑用户 +export function postUpdateUser(data, id) { + return request({ + url: authApi + '/identity/users/' + id, + method: 'put', + data + }) +} + +//删除用户 +export function postDeleteUser(id) { + return request({ + url: authApi + '/identity/users/' + id, + method: 'delete', + }) +} + +// 获取当前用户的角色 +export function usersroles() { + return request({ + url: authApi + '/identity/users/assignable-roles', + method: 'get' + }) +} + +//获取当前角色 +export function getusersID(data) { + return request({ + url: authApi + '/identity/users/' + data + '/roles', + method: 'get' + }) +} + +//重置密码 +export function resetPassword(id) { + return request({ + url: authApi + '/identity/users/reset-password/' + id, + method: 'post' + }) +} \ No newline at end of file diff --git a/Code/Fe/src/permission.js b/Code/Fe/src/permission.js index a4d5afd..ed2865d 100644 --- a/Code/Fe/src/permission.js +++ b/Code/Fe/src/permission.js @@ -14,7 +14,7 @@ NProgress.configure({ const whiteList = ['/login','/callback'] // no redirect whitelist const noUserMsg = '获取用户信息失败,请重新登录 !' const getErrMsg = '数据获取失败 !' -const hasToken = getToken() + // 跳转登录页 const pageToLogin = (to, from, next) => { @@ -24,7 +24,8 @@ const pageToLogin = (to, from, next) => { NProgress.done() } else { // other pages that do not have permission to access are redirected to the login page. - removeToken() + // removeToken() + store.dispatch('user/resetToken') next(`/login?redirect=${to.path}`) NProgress.done() } @@ -32,27 +33,32 @@ const pageToLogin = (to, from, next) => { // 首次进入页面加载数据处理 const toPageInit = async (to, from, next) => { - - // 获取用户信息 - // let _userName = localStorage.getItem("isLoginTokenName")//使用用户名获取 - // if(_userName && _userName != null && (!store.getters.currentUserInfo || store.getters.currentUserInfo.length <= 0)){ - // await store.dispatch('user/getUserInfo',_userName)//使用用户名获取 - let _user_access = hasToken.substring(hasToken.indexOf(" ") + 1,hasToken.length) - if(hasToken && hasToken != null && (!store.getters.currentUserInfo || store.getters.currentUserInfo.length <= 0)){ - await store.dispatch('user/getUserInfoByToken',_user_access) - .then(()=>{ - toNextHandle(to, from, next) - }) - .catch(()=>{ - // todo-fast:接口恢复后更改 - toNextHandle(to, from, next) - // Message.error(noUserMsg) - // pageToLogin(to, from, next) - }) - return + // const hasToken = getToken() + // // 获取用户信息 + // // let _userName = localStorage.getItem("isLoginTokenName")//使用用户名获取 + // // if(_userName && _userName != null && (!store.getters.currentUserInfo || store.getters.currentUserInfo.length <= 0)){ + // // await store.dispatch('user/getUserInfo',_userName)//使用用户名获取 + // let _user_access = hasToken.substring(hasToken.indexOf(" ") + 1,hasToken.length) + // if(hasToken && hasToken != null && (!store.getters.currentUserInfo || store.getters.currentUserInfo.length <= 0)){ + // await store.dispatch('user/getUserInfoByToken',_user_access) + // .then(()=>{ + // toNextHandle(to, from, next) + // }) + // .catch(()=>{ + // // todo-fast:接口恢复后更改 + // toNextHandle(to, from, next) + // // Message.error(noUserMsg) + // // pageToLogin(to, from, next) + // }) + // return + // } + if(getToken()){ + toNextHandle(to, from, next) + }else{ + Message.error('暂无token,请重新登录') + store.dispatch("user/logout") } - toNextHandle(to, from, next) } // 跳转处理 @@ -67,13 +73,14 @@ const toNextHandle = async (to, from, next) => { }) } - // 获取菜单数据 - if(!store.getters.permission_routes || store.getters.permission_routes.length <= 0){ + // 获取菜单数据 permission_routes + if(!store.getters.addRoutes || store.getters.addRoutes.length <= 0){ isFresh = true - await store.dispatch('permission/getApiColumnsNames') + await store.dispatch('permission/getAppConfig') .then(res=>{ // 没有权限(token失效处理) if(!res || res.length <=0){ + Message.error('用户无权限或者token失效,请重新登录') store.dispatch("user/logout") } }) @@ -106,6 +113,8 @@ router.beforeEach(async (to, from, next) => { // set page title document.title = getPageTitle() + const hasToken = getToken() + // 判断是否自动登录 let isAutoLogin = JSON.parse(localStorage.getItem('isConfigLogin')) || to.query.loginName @@ -131,25 +140,27 @@ router.beforeEach(async (to, from, next) => { console.log('没有token,是登录页,pageToLogin') pageToLogin(to, from, next) } else { - // todo:自动登录,即没有密码登录情况处理 - mgr.signinRedirect(); //执行重定向 - - // if(isAutoLogin){ - // let _username = localStorage.getItem("isConfigLogin") && localStorage.getItem("isConfigLogin") != 'false' ? localStorage.getItem("configLoginName") : to.query.loginName - // await store.dispatch('user/loginOnlyName', {username:_username}) - // .then(()=>{ - // toPageInit(to, from, next) - // }) - // .catch(()=>{ - // // todo-fast:接口恢复后更改 - // toNextHandle(to, from, next) - // // Message.error(noUserMsg) - // // pageToLogin(to, from, next) - // }) - // }else{ - // console.log('没有token,不是登录页,不是自动登录,pageToLogin') - // pageToLogin(to, from, next) - // } + // 如果有单点登录方式使用下方配置 + // mgr.signinRedirect(); //执行重定向 + if(isAutoLogin){ + let _username = localStorage.getItem("isConfigLogin") && localStorage.getItem("isConfigLogin") != 'false' ? localStorage.getItem("configLoginName") : to.query.loginName + await store.dispatch('user/login', { + username:_username, + password:localStorage.getItem("configLoginPass") + }) + .then(()=>{ + toPageInit(to, from, next) + }) + .catch(()=>{ + // todo-fast:接口恢复后更改 + toNextHandle(to, from, next) + // Message.error(noUserMsg) + // pageToLogin(to, from, next) + }) + }else{ + console.log('没有token,不是登录页,不是自动登录,pageToLogin') + pageToLogin(to, from, next) + } } } }) diff --git a/Code/Fe/src/store/modules/definition.js b/Code/Fe/src/store/modules/definition.js index c231438..64acf97 100644 --- a/Code/Fe/src/store/modules/definition.js +++ b/Code/Fe/src/store/modules/definition.js @@ -170,6 +170,13 @@ const actions = { reject(err) }) }) + }, + // 重置配置信息 + resetDefinition({ commit }) { + commit('SET_ENUM_LIST', []) + commit('SET_COLUMZH_LIST', null) + commit('SET_DTOCOLUMN_TYPES', []) + commit('SET_API_ACTIONS', []) } } diff --git a/Code/Fe/src/store/modules/permission.js b/Code/Fe/src/store/modules/permission.js index 5342f9f..f800273 100644 --- a/Code/Fe/src/store/modules/permission.js +++ b/Code/Fe/src/store/modules/permission.js @@ -30,9 +30,6 @@ const mutations = { SET_TABLESNAME: (state, data) => { state.tablesName = data }, - SET_AbpIdentity: (state, data) => { - state.abpIdentityName = data - } } /** * 静态路由懒加载 @@ -136,14 +133,20 @@ export function initTreeMenusHandle(tree, list,first) { } const actions = { // 设置权限 - setUserRoles({commit},data){ - commit('SET_ROLES', data) + resetUserRoles({commit}){ + commit('SET_ROUTES',[]) + commit('SET_ROLES', []) + commit('SET_TABLESNAME', null) }, - getApiColumnsNames({ + + // 获取菜单数据 + getAppConfig({ commit }, userId) { return new Promise(resolve => { getDefinitionMenu(true).then(res => { + // 存储当前用户信息 + store.dispatch('user/setUserInfo',res.currentUser) let roles_arr = [] for(let r in res.auth.grantedPolicies){ if(res.auth.grantedPolicies[r])roles_arr.push(r) @@ -166,8 +169,6 @@ const actions = { } // 存储所有的表名 commit('SET_TABLESNAME', _menuList) - // 存储身份标识 - commit('SET_AbpIdentity', _AbpIdentity) // 数据模拟,todo-new:接口获取 let _treeMenusAll = null//树形菜单 // _treeMenusAll = [ @@ -249,6 +250,7 @@ const actions = { }) }) }, + } export default { diff --git a/Code/Fe/src/store/modules/user.js b/Code/Fe/src/store/modules/user.js index aa84f37..5ffdf2a 100644 --- a/Code/Fe/src/store/modules/user.js +++ b/Code/Fe/src/store/modules/user.js @@ -1,5 +1,6 @@ import { token, + login, logout, getUsersByToken, getUsersByUserName @@ -12,7 +13,6 @@ import { import router, { resetRouter } from '@/router' -import qs from 'qs' import store from '@/store' import { mgr } from "@/oidc/oidc-client"; @@ -31,15 +31,22 @@ const mutations = { } // 登录(token)成功后处理 -const loginSuccess = (res,username,resolve,reject) => { - setToken(res.token_type + ' ' + res.access_token) +const loginSuccess = (type,token,username,resolve,reject) => { + let _type = type ? type : 'Bearer' + setToken(_type + ' ' + token) localStorage.setItem('isLoginTokenName',username) + resolve() + // store.dispatch('user/getUserInfoByToken',token).then(()=>{ + // resolve() + // }).catch(()=>{ + // reject() + // }) - store.dispatch('user/getUserInfo',username).then(()=>{ - resolve() - }).catch(()=>{ - reject() - }) + // store.dispatch('user/getUserInfo',username).then(()=>{ + // resolve() + // }).catch(()=>{ + // reject() + // }) } // 单点登录(token)成功后处理 @@ -54,6 +61,11 @@ const loginSuccessBySignin = (res,resolve, reject,commit) => { } const actions = { + // 设置当前用户 + setUserInfo({commit},data){ + commit('SET_USERINFO',data) + }, + // 登录,需要密码 login({ commit, @@ -63,50 +75,35 @@ const actions = { username, } = userInfo return new Promise((resolve, reject) => { - let params = qs.stringify({ - password: password, - username: username, - client_id:localStorage.getItem('appClientId'), - scopes:localStorage.getItem('appClientScope'), - grant_type:'password' - }); - token(params).then(response => { - if (response.access_token == null) { - reject() + // let params = qs.stringify({ + // password: password, + // username: username, + // client_id:localStorage.getItem('appClientId'), + // scopes:localStorage.getItem('appClientScope'), + // grant_type:'password' + // }); + let params= { + name:username, + password: password + } + login(params).then(response => { + if (response && response.token) { + loginSuccess(null,response.token,username,resolve,reject,commit) } else { - loginSuccess(response,username,resolve,reject,commit) - } - }).catch(error => { - reject(error) - }) - }) - }, - - // 自动登录,不需要密码 todo:更改接口,去掉password - loginOnlyName({ - commit, - }, userInfo) { - const { - password, - username, - } = userInfo - return new Promise((resolve, reject) => { - let params = qs.stringify({ - password: '1q2w3E*', - username: username, - client_id:localStorage.getItem('appClientId'), - scopes:localStorage.getItem('appClientScope'), - grant_type:'password' - }); - token(params).then(response => { - if (response.access_token == null) { reject() - } else { - loginSuccess(response,username,resolve,reject,commit) } }).catch(error => { reject(error) }) + // token(params).then(response => { + // if (response.access_token == null) { + // reject() + // } else { + // loginSuccess(response,username,resolve,reject,commit) + // } + // }).catch(error => { + // reject(error) + // }) }) }, @@ -141,10 +138,9 @@ const actions = { }) { return new Promise((resolve, reject) => { // logout().then(() => { - dispatch('permission/setUserRoles',[]) - dispatch('tagsView/delAllViews', null, { - root: true - }).then(()=>{ + dispatch('permission/resetUserRoles',null,{root:true}) + dispatch('definition/resetDefinition',null,{root:true}) + dispatch('tagsView/delAllViews', null, {root: true}).then(()=>{ removeToken() resetRouter() resolve() @@ -164,7 +160,7 @@ const actions = { commit }) { return new Promise(resolve => { - commit('SET_ROLES', []) + // commit('SET_ROLES', []) localStorage.setItem('isLoginTokenName',null) removeToken() resolve() @@ -200,7 +196,7 @@ const actions = { .then(info=>{ if(info){ let _info = info - _info.userInfo = info.preferred_username + _info.name = info.preferred_username _info.id = info.sub commit('SET_USERINFO', _info) resolve(_info) diff --git a/Code/Fe/src/views/menuList/AbpIdentityMarkRoles.vue b/Code/Fe/src/views/menuList/AbpIdentityMarkRoles.vue index bded4b4..9518f06 100644 --- a/Code/Fe/src/views/menuList/AbpIdentityMarkRoles.vue +++ b/Code/Fe/src/views/menuList/AbpIdentityMarkRoles.vue @@ -1,713 +1,549 @@