1.前端項目訪問后臺內容時免登陸(一般用于后臺接口需要校驗登陸時)
處理思路:將后臺用戶的登陸校驗令牌信息在用戶登錄后添加至前端項目訪問地址的參數列表中,如:
https://yourdomain/Home/Index#/https://yourdomain/virtualdirectory/?watercloud_Token=86df42b8-1baa-4e6f-8222-7fa8859e34dd&watercloud_Mark=cf06dad9-3a1c-4c6d-8ccb-4f65aecd20c6&pc_WC-Token=08dddb95-dc77-4fc0-8d83-5bc78a7c8086
修改后臺菜單頁面鏈接:此處以設置首頁地址為例,如果需要設置為菜單地址則需要增加邏輯判斷
在WaterCloud.Web\Controllers\ClientsDataController.cs文件中,修改GetMenuListNew方法
/// <summary>
/// 菜單按鈕信息
/// </summary>
/// <returns></returns>
private async Task<string> GetMenuListNew()
{var currentuser = _userService.currentuser;string pc_token = await CacheHelper.GetAsync<string>("pc_" + GlobalContext.SystemConfig.TokenName + "_" + currentuser.UserId + "_" + currentuser.LoginTime);var roleId = currentuser.RoleId;StringBuilder sbJson = new StringBuilder();InitEntity init = new InitEntity();init.homeInfo = new HomeInfoEntity();//首頁信息實體var url = HttpUtility.UrlEncode( $"watercloud_Token={currentuser.LoginToken}&watercloud_Mark={currentuser.loginMark}&pc_WC-Token={pc_token}");//設置首頁地址init.homeInfo.href = $"{GlobalContext.SystemConfig.HomePage}?{url}";// https://qzgt.etianshui.com/qzgtxzgl init.logoInfo = new LogoInfoEntity();var systemset = await _setService.GetForm(currentuser.CompanyId);//修改主頁及logo參數init.logoInfo.title = systemset.F_LogoCode;init.logoInfo.image = ".." + systemset.F_Logo;init.menuInfo = new List<MenuInfoEntity>();init.menuInfo = ToMenuJsonNew(await _roleAuthorizeService.GetMenuList(roleId), "0");sbJson.Append(init.ToJson());return sbJson.ToString();
}
此時在打開該前端項目地址時,將可在前端項目頁面中,通過頁面參數獲取后臺登陸用戶的令牌信息:、watercloud_Token、pc_WC-Token
在調用接口時,可以通過傳輸令牌信息,后臺可通過令牌信息(應該是watercloud_Token,如果不是就換成watercloud_Token)獲取緩存中的當前登錄用戶信息,如:
var authHeader = Request.Headers["WC-Token"].ToString();//從請求中的headers中獲取令牌信息
var model = await CacheHelper.GetAsync<OperatorModel>("watercloud_operator_"+authHeader+"");//在緩存中獲取當前登錄用戶信息
獲取當前用戶之后則可進行之后的業務流程
2.前端項目跳轉至系統內
在獲取登錄令牌信息后,可將令牌信息內容設置在cookie中并發起連接的跳轉或通過彈框(iframe)打開地址或新頁面打開鏈接(注意:此處通過前端項目打開后臺系統菜單地址時,需要前端頁面和后臺系統在同一個瀏覽器中打開,且后臺必須先登錄,后進行跳轉,否則將無法識別跳轉頁面的腳本內容導致頁面報錯)
前端處理內容:在獲取令牌信息后,需將信息格式化為cookie字符串并設置cookie,然后發起連接跳轉
拼接的方式是:參數名+等號+參數+分號+空格(此處是否一定需要加空格沒有深究,僅是按照后臺頁面上顯示的內容進行復刻)
//watercloud_Token,watercloud_Mark,pc_WC-Token為頁面獲取到的令牌信息。wc_returnurl為后臺系統菜單地址
document.cookie = "watercloud_Token=86df42b8-1baa-4e6f-8222-7fa8859e34dd; watercloud_Mark=cf06dad9-3a1c-4c6d-8ccb-4f65aecd20c6; pc_WC-Token=08dddb95-dc77-4fc0-8d83-5bc78a7c8086; wc_returnurl=/NeiWaiQin/Cardreplacement/Index;"
//以新頁面打開方式打開鏈接
window.open("https://yourDomain/NeiWaiQin/Cardreplacement/Index")
執行后將跳轉至后臺系統指定菜單下,如:
3.彈框方式打開時頁面按鈕不顯示問題
引發該問題的原因在于系統框架腳本中判斷按鈕是否顯示的條件為:
var moduleId = top.$(".layui-tab-title>.layui-this").attr("lay-id");
此時獲取到的moduleId值為:
https://yourdomain/Home/Index#/https://yourdomain/virtualdirectory/?watercloud_Token=86df42b8-1baa-4e6f-8222-7fa8859e34dd&watercloud_Mark=cf06dad9-3a1c-4c6d-8ccb-4f65aecd20c6&pc_WC-Token=08dddb95-dc77-4fc0-8d83-5bc78a7c8086
系統菜單中無改內容所以按鈕不顯示,所以修改判斷條件即可
解決方案:修改WaterCloud.Web\wwwroot\js\lay-module\waterCloud\common.js文件中的authorizeButtonNew方法:(增加虛擬路徑判斷條件,如果獲取值中存在虛擬路徑內容,則判斷為前端項目跳轉至后臺的情況,將moduleId值設置為location.pathname(當前打開鏈接地址,從前端項目跳轉至后臺系統菜單時此處的值為:NeiWaiQin/Workovertime/Index),系統判斷如果當前人員有該按鈕權限則顯示按鈕)
//按鈕權限(控制js模板,格式必須嚴格,新)
authorizeButtonNew: function (innerHTML) {//行操作權限控制var moduleId = top.$(".layui-tab-title>.layui-this").attr("lay-id");if (!moduleId || moduleId.indexOf("/qzgtxzgl/") != -1) {//增加虛擬路徑判斷,如果取不到值或者是大數據鏈接進入,獲取當前pathnamemoduleId = location.pathname;}var returnhtml = '';//沒有就全清if (!top.clients || !top.clients.authorizeButton) {return returnhtml;}var dataJson = top.clients.authorizeButton[moduleId.split("?")[0]];if (innerHTML.indexOf('</button>') > -1) {var buttonHumanized = sessionStorage.getItem('watercloudButtonHumanized');var tempList = innerHTML.split('</button>');for (var i = 0; i < tempList.length; i++) {if (tempList[i].indexOf('<button ') > -1) {var itemList = tempList[i].split('<button ');returnhtml = returnhtml + itemList[0];if (itemList[1].indexOf(' authorize') == -1) {returnhtml = returnhtml + '<button ' + itemList[1] + '</button>';}else if (dataJson != undefined) {$.each(dataJson, function (i) {if (itemList[1].indexOf('id="' + dataJson[i].F_EnCode + '"') > -1) {returnhtml = returnhtml + '<button ' + itemList[1] + '</button>';return false;}});}if (!!buttonHumanized) {returnhtml = returnhtml.replace('layui-hide','');}if (itemList.length>2) {returnhtml = returnhtml + itemList[2];}}else {returnhtml = returnhtml + tempList[i];}}}else if (innerHTML.indexOf('</a>') > -1){var tempList = innerHTML.split('</a>');for (var i = 0; i < tempList.length; i++) {if (tempList[i].indexOf('<a ') > -1) {var itemList = tempList[i].split('<a ');returnhtml = returnhtml + itemList[0];if (itemList[1].indexOf(' authorize') == -1) {returnhtml = returnhtml + '<a ' + itemList[1] + '</a>';}else if (dataJson != undefined) {$.each(dataJson, function (i) {if (itemList[1].indexOf('id="' + dataJson[i].F_EnCode + '"') > -1) {returnhtml = returnhtml + '<a ' + itemList[1] + '</a>';return false;}});}if (itemList.length > 2) {returnhtml = returnhtml + itemList[2];}}else {returnhtml = returnhtml + tempList[i];}}}//去除隱藏//returnhtml = returnhtml.replace(/ layui-hide/g, '');return returnhtml;
},