优化api异常提示;

优化授权菜单加载逻辑
This commit is contained in:
yubaolee 2018-04-04 11:59:18 +08:00
parent a631e15d7e
commit 7989b4e563
24 changed files with 174 additions and 108 deletions

Binary file not shown.

View File

@ -50,7 +50,12 @@ namespace OpenAuth.App.SSO
try try
{ {
var value = _helper.Get(null, requestUri); var value = _helper.Get(null, requestUri);
return Boolean.Parse(value); var result = JsonHelper.Instance.Deserialize<Response<bool>>(value);
if (result.Code == 200)
{
return result.Result;
}
throw new Exception(result.Message);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -81,8 +86,13 @@ namespace OpenAuth.App.SSO
try try
{ {
var value = _helper.Get<UserWithAccessedCtrls>(null, requestUri); var value = _helper.Get(null, requestUri);
return value; var result = JsonHelper.Instance.Deserialize<Response<UserWithAccessedCtrls>>(value);
if (result.Code == 200)
{
return result.Result;
}
throw new Exception(result.Message);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -103,8 +113,13 @@ namespace OpenAuth.App.SSO
try try
{ {
var value = _helper.Get<string>(null, requestUri); var value = _helper.Get(null, requestUri);
return value; var result = JsonHelper.Instance.Deserialize<Response<string>>(value);
if (result.Code == 200)
{
return result.Result;
}
throw new Exception(result.Message);
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@ -23,29 +23,6 @@ namespace OpenAuth.Mvc.Controllers
return View(); return View();
} }
/// <summary>
/// 所有页面按钮控制分部视图
/// </summary>
/// <returns>ActionResult.</returns>
[ChildActionOnly]
public ActionResult MenuHeader()
{
var sb = new StringBuilder();
foreach (var element in CurrentModule.Elements)
{
sb.Append("<button "
+ " data-type='" + element.DomId + "' "
+ " class='layui-btn layui-btn-small " + element.Class + "' "
+ element.Attr
+ ">");
if (!string.IsNullOrEmpty(element.Icon))
{
sb.Append("<i class='layui-icon'>" + element.Icon + "</i>");
}
sb.Append(element.Name + "</button>");
}
ViewBag.Buttons = sb.ToString();
return View();
}
} }
} }

View File

@ -70,6 +70,13 @@ namespace OpenAuth.Mvc.Controllers
return JsonHelper.Instance.Serialize(menus); return JsonHelper.Instance.Serialize(menus);
} }
public string LoadAuthorizedMenus()
{
return JsonHelper.Instance.Serialize(CurrentModule.Elements);
}
#region #region
//添加模块 //添加模块

View File

@ -623,7 +623,6 @@
<Content Include="Views\Shared\_FlowForm.cshtml" /> <Content Include="Views\Shared\_FlowForm.cshtml" />
<Content Include="Views\Home\Main.cshtml" /> <Content Include="Views\Home\Main.cshtml" />
<Content Include="Views\Shared\_Layout.cshtml" /> <Content Include="Views\Shared\_Layout.cshtml" />
<Content Include="Views\Home\MenuHeader.cshtml" />
<Content Include="Views\Categories\Index.cshtml" /> <Content Include="Views\Categories\Index.cshtml" />
<Content Include="Views\ModuleManager\Assign.cshtml" /> <Content Include="Views\ModuleManager\Assign.cshtml" />
<Content Include="Views\RoleManager\Index.cshtml" /> <Content Include="Views\RoleManager\Index.cshtml" />

View File

@ -2,8 +2,7 @@
{ {
<link rel="stylesheet" href="/css/treetable.css" /> <link rel="stylesheet" href="/css/treetable.css" />
} }
<blockquote class="layui-elem-quote news_search toolList"> <blockquote class="layui-elem-quote news_search toolList" id="menus">
@Html.Action("MenuHeader", "Home")
</blockquote> </blockquote>
<div style="display: flex;"> <div style="display: flex;">

View File

@ -2,8 +2,7 @@
{ {
<link rel="stylesheet" href="/css/treetable.css" /> <link rel="stylesheet" href="/css/treetable.css" />
} }
<blockquote class="layui-elem-quote news_search toolList"> <blockquote class="layui-elem-quote news_search toolList" id="menus">
@Html.Action("MenuHeader", "Home")
</blockquote> </blockquote>
<div class="layui-row"> <div class="layui-row">

View File

@ -2,8 +2,7 @@
{ {
<link rel="stylesheet" href="/css/treetable.css" /> <link rel="stylesheet" href="/css/treetable.css" />
} }
<blockquote class="layui-elem-quote news_search toolList"> <blockquote class="layui-elem-quote news_search toolList" id="menus">
@Html.Action("MenuHeader", "Home")
</blockquote> </blockquote>

View File

@ -1,8 +0,0 @@

@{
Layout = null;
}
@Html.Raw(ViewBag.Buttons)

View File

@ -2,8 +2,7 @@
{ {
<link rel="stylesheet" href="/css/treetable.css" /> <link rel="stylesheet" href="/css/treetable.css" />
} }
<blockquote class="layui-elem-quote news_search toolList"> <blockquote class="layui-elem-quote news_search toolList" id="menus">
@Html.Action("MenuHeader", "Home")
</blockquote> </blockquote>
<div style="display: flex;"> <div style="display: flex;">
@ -69,7 +68,7 @@
<!--模块添加/编辑窗口--> <!--模块添加/编辑窗口-->
<div id="divEdit" style="display: none"> <div id="divEdit" style="display: none">
<form class="layui-form" action="" id="formEdit"> <form class="layui-form layui-form-pane" action="" id="formEdit">
<input type="hidden" name="Id" v-model="Id" /> <input type="hidden" name="Id" v-model="Id" />

View File

@ -2,8 +2,7 @@
{ {
<link rel="stylesheet" href="/css/treetable.css" /> <link rel="stylesheet" href="/css/treetable.css" />
} }
<blockquote class="layui-elem-quote news_search toolList"> <blockquote class="layui-elem-quote news_search toolList" id ="menus">
@Html.Action("MenuHeader", "Home")
</blockquote> </blockquote>
<div class="layui-row"> <div class="layui-row">
@ -38,7 +37,7 @@
<!--用户添加/编辑窗口--> <!--用户添加/编辑窗口-->
<div id="divEdit" style="display: none"> <div id="divEdit" style="display: none">
<form class="layui-form" action="" id="formEdit"> <form class="layui-form layui-form-pane" action="" id="formEdit">
<input type="hidden" name="Id" v-model="Id" /> <input type="hidden" name="Id" v-model="Id" />

View File

@ -2,8 +2,7 @@
{ {
<link rel="stylesheet" href="/css/treetable.css" /> <link rel="stylesheet" href="/css/treetable.css" />
} }
<blockquote class="layui-elem-quote news_search toolList"> <blockquote class="layui-elem-quote news_search toolList" id ="menus">
@Html.Action("MenuHeader", "Home")
</blockquote> </blockquote>
<div class="layui-row"> <div class="layui-row">
@ -33,7 +32,7 @@
<!--角色添加/编辑窗口--> <!--角色添加/编辑窗口-->
<div id="divEdit" style="display: none"> <div id="divEdit" style="display: none">
<form class="layui-form" action="" id="formEdit"> <form class="layui-form layui-form-pane" action="" id="formEdit">
<input type="hidden" name="Id" v-model="Id" /> <input type="hidden" name="Id" v-model="Id" />
@ -55,7 +54,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item" pane>
<label class="layui-form-label">是否可用</label> <label class="layui-form-label">是否可用</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="checkbox" name="Status" v-model="Status" lay-skin="switch" value="1"> <input type="checkbox" name="Status" v-model="Status" lay-skin="switch" value="1">

View File

@ -2,8 +2,7 @@
{ {
<link rel="stylesheet" href="/css/treetable.css" /> <link rel="stylesheet" href="/css/treetable.css" />
} }
<blockquote class="layui-elem-quote news_search toolList"> <blockquote class="layui-elem-quote news_search toolList" id="menus">
@Html.Action("MenuHeader", "Home")
</blockquote> </blockquote>
<div class="layui-row"> <div class="layui-row">

View File

@ -3,25 +3,56 @@ layui.define("jquery", function (exports) {
var jQuery = layui.jquery, var jQuery = layui.jquery,
$ = layui.jquery; $ = layui.jquery;
//获取url的参数值 //获取url的参数值
$.getUrlParam = function (name) { $.getUrlParam = function (name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg); var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null; if (r != null) return unescape(r[2]); return null;
} }
//把name/value的数组转为obj对象 //把name/value的数组转为obj对象
$.arrayToObj = function(array) { $.arrayToObj = function (array) {
var result = {}; var result = {};
for (var i = 0; i < array.length; i++) { for (var i = 0; i < array.length; i++) {
var field = array[i]; var field = array[i];
if (field.name in result) { if (field.name in result) {
result[field.name] += ',' + field.value; result[field.name] += ',' + field.value;
} else { } else {
result[field.name] = field.value; result[field.name] = field.value;
}
} }
return result;
} }
return result;
}
//加载菜单
$.fn.extend({
loadMenus: function () {
var dom = $(this);
$.ajax("/ModuleManager/LoadAuthorizedMenus",
{
async: false
, success: function (data) {
var obj = JSON.parse(data);
var sb = '';
$.each(obj,
function () {
var element = this;
sb += ("<button " + " data-type='" + element.DomId +
"' " + " class='layui-btn layui-btn-small " + element.Class +
"' " + element.Attr + ">");
if (element.Icon != null && element.Icon != '') {
sb += ("<i class='layui-icon'>" + element.Icon + "</i>");
}
sb += (element.Name + "</button>");
});
dom.html(sb);
}
});
}
});
exports('utils'); exports('utils');
}); });

View File

@ -1,12 +1,14 @@
layui.config({ layui.config({
base: "/js/" base: "/js/"
}).use(['form','vue', 'ztree', 'layer', 'jquery', 'table','droptree','openauth'], function () { }).use(['form','vue', 'ztree', 'layer', 'jquery', 'table','droptree','openauth','utils'], function () {
var form = layui.form, var form = layui.form,
layer = layui.layer, layer = layui.layer,
$ = layui.jquery; $ = layui.jquery;
var table = layui.table; var table = layui.table;
var openauth = layui.openauth; var openauth = layui.openauth;
layui.droptree("/Categories/AllTypes", "#TypeName", "#TypeId", false); layui.droptree("/Categories/AllTypes", "#TypeName", "#TypeId", false);
$("#menus").loadMenus();
//主列表加载,可反复调用进行刷新 //主列表加载,可反复调用进行刷新
var config= {}; //table的参数如搜索key点击tree的id var config= {}; //table的参数如搜索key点击tree的id

View File

@ -1,6 +1,6 @@
layui.config({ layui.config({
base: "/js/" base: "/js/"
}).use(['form','vue', 'ztree', 'layer', 'jquery', 'table','droptree','openauth'], function () { }).use(['form','vue', 'ztree', 'layer', 'jquery', 'table','droptree','openauth','utils'], function () {
var form = layui.form, var form = layui.form,
layer = (top == undefined || top.layer === undefined )? layui.layer : top.layer, layer = (top == undefined || top.layer === undefined )? layui.layer : top.layer,
$ = layui.jquery; $ = layui.jquery;
@ -8,6 +8,8 @@
var openauth = layui.openauth; var openauth = layui.openauth;
var thiswin = (top == undefined) ? window : top.window; var thiswin = (top == undefined) ? window : top.window;
layui.droptree("/UserSession/GetOrgs", "#Organizations", "#OrganizationIds"); layui.droptree("/UserSession/GetOrgs", "#Organizations", "#OrganizationIds");
$("#menus").loadMenus();
//主列表加载,可反复调用进行刷新 //主列表加载,可反复调用进行刷新
var config= {}; //table的参数如搜索key点击tree的id var config= {}; //table的参数如搜索key点击tree的id
@ -70,7 +72,7 @@
layer.open({ layer.open({
type: 2, type: 2,
area: ['750px', '550px'], //宽高 area: ['800px', '700px'], //宽高
maxmin: true, //开启最大化最小化按钮 maxmin: true, //开启最大化最小化按钮
title: title, title: title,
content: '/flowInstances/edit?id=' + data.Id, content: '/flowInstances/edit?id=' + data.Id,

View File

@ -169,6 +169,7 @@ layui.config({
return false; //阻止表单跳转。 return false; //阻止表单跳转。
}); });
flowDesignPanel.reinitSize($(window).width() - 30, $(window).height() - 100);
$(window).resize(function () { $(window).resize(function () {
flowDesignPanel.reinitSize($(window).width() - 30, $(window).height() - 100); flowDesignPanel.reinitSize($(window).width() - 30, $(window).height() - 100);
}); });

View File

@ -1,6 +1,6 @@
layui.config({ layui.config({
base: "/js/" base: "/js/"
}).use(['form', 'vue', 'ztree', 'layer', 'jquery', 'table', 'droptree', 'openauth'], function () { }).use(['form', 'vue', 'ztree', 'layer', 'jquery', 'table', 'droptree', 'openauth','utils'], function () {
var form = layui.form, element = layui.element, var form = layui.form, element = layui.element,
layer = (top == undefined || top.layer === undefined )? layui.layer : top.layer, layer = (top == undefined || top.layer === undefined )? layui.layer : top.layer,
$ = layui.jquery; $ = layui.jquery;
@ -10,6 +10,8 @@
layui.droptree("/UserSession/GetOrgs", "#Organizations", "#OrganizationIds"); layui.droptree("/UserSession/GetOrgs", "#Organizations", "#OrganizationIds");
$("#menus").loadMenus();
//主列表加载,可反复调用进行刷新 //主列表加载,可反复调用进行刷新
var config = {}; //table的参数如搜索key点击tree的id var config = {}; //table的参数如搜索key点击tree的id
var mainList = function (options) { var mainList = function (options) {
@ -71,7 +73,7 @@
layer.open({ layer.open({
type: 2, type: 2,
area: ['600px', '500px'], //宽高 area: ['800px', '700px'], //宽高
maxmin: true, //开启最大化最小化按钮 maxmin: true, //开启最大化最小化按钮
title: title, title: title,
content: '/flowschemes/design?id='+data.Id, content: '/flowschemes/design?id='+data.Id,

View File

@ -1,6 +1,6 @@
layui.config({ layui.config({
base: "/js/" base: "/js/"
}).use(['form','vue', 'ztree', 'layer', 'jquery', 'table','droptree','openauth'], function () { }).use(['form','vue', 'ztree', 'layer', 'jquery', 'table','droptree','openauth','utils'], function () {
var form = layui.form, var form = layui.form,
element = layui.element, element = layui.element,
layer = (top == undefined || top.layer === undefined )? layui.layer : top.layer, layer = (top == undefined || top.layer === undefined )? layui.layer : top.layer,
@ -12,7 +12,7 @@
layui.droptree("/UserSession/GetOrgs", "#Organizations", "#OrganizationIds"); layui.droptree("/UserSession/GetOrgs", "#Organizations", "#OrganizationIds");
$("#menus").loadMenus();
//主列表加载,可反复调用进行刷新 //主列表加载,可反复调用进行刷新
var config= {}; //table的参数如搜索key点击tree的id var config= {}; //table的参数如搜索key点击tree的id
var mainList = function (options) { var mainList = function (options) {

View File

@ -1,6 +1,6 @@
layui.config({ layui.config({
base: "/js/" base: "/js/"
}).use(['form','vue', 'ztree', 'layer', 'jquery', 'table','droptree','openauth'], function () { }).use(['form','vue', 'ztree', 'layer', 'jquery', 'table','droptree','openauth','utils'], function () {
var form = layui.form, var form = layui.form,
layer = layui.layer, layer = layui.layer,
$ = layui.jquery; $ = layui.jquery;
@ -8,6 +8,8 @@ layui.config({
var openauth = layui.openauth; var openauth = layui.openauth;
layui.droptree("/UserSession/QueryModuleList", "#ParentName", "#ParentId", false); layui.droptree("/UserSession/QueryModuleList", "#ParentName", "#ParentId", false);
$("#menus").loadMenus();
//主列表加载,可反复调用进行刷新 //主列表加载,可反复调用进行刷新
var config= {}; //table的参数如搜索key点击tree的id var config= {}; //table的参数如搜索key点击tree的id
var mainList = function (options) { var mainList = function (options) {

View File

@ -1,12 +1,14 @@
layui.config({ layui.config({
base: "/js/" base: "/js/"
}).use(['form','vue', 'ztree', 'layer', 'jquery', 'table','droptree','openauth'], function () { }).use(['form','vue', 'ztree', 'layer', 'jquery', 'table','droptree','openauth','utils'], function () {
var form = layui.form, var form = layui.form,
layer = layui.layer, layer = layui.layer,
$ = layui.jquery; $ = layui.jquery;
var table = layui.table; var table = layui.table;
var openauth = layui.openauth; var openauth = layui.openauth;
layui.droptree("/UserSession/GetOrgs", "#ParentName", "#ParentId", false); layui.droptree("/UserSession/GetOrgs", "#ParentName", "#ParentId", false);
$("#menus").loadMenus();
//主列表加载,可反复调用进行刷新 //主列表加载,可反复调用进行刷新
var config= {}; //table的参数如搜索key点击tree的id var config= {}; //table的参数如搜索key点击tree的id

View File

@ -1,6 +1,6 @@
layui.config({ layui.config({
base: "/js/" base: "/js/"
}).use(['form','vue', 'ztree', 'layer', 'jquery', 'table','droptree','openauth'], function () { }).use(['form','vue', 'ztree', 'layer', 'jquery', 'table','droptree','openauth','utils'], function () {
var form = layui.form, var form = layui.form,
layer = layui.layer, layer = layui.layer,
$ = layui.jquery; $ = layui.jquery;
@ -8,6 +8,8 @@ layui.config({
var openauth = layui.openauth; var openauth = layui.openauth;
layui.droptree("/UserSession/GetOrgs", "#Organizations", "#OrganizationIds"); layui.droptree("/UserSession/GetOrgs", "#Organizations", "#OrganizationIds");
$("#menus").loadMenus();
//主列表加载,可反复调用进行刷新 //主列表加载,可反复调用进行刷新
var config= {}; //table的参数如搜索key点击tree的id var config= {}; //table的参数如搜索key点击tree的id
var mainList = function (options) { var mainList = function (options) {

View File

@ -1,6 +1,6 @@
layui.config({ layui.config({
base: "/js/" base: "/js/"
}).use(['form','vue', 'ztree', 'layer', 'jquery', 'table','droptree','openauth'], function () { }).use(['form','vue', 'ztree', 'layer', 'jquery', 'table','droptree','openauth','utils'], function () {
var form = layui.form, var form = layui.form,
layer = layui.layer, layer = layui.layer,
$ = layui.jquery; $ = layui.jquery;
@ -8,6 +8,8 @@ layui.config({
var openauth = layui.openauth; var openauth = layui.openauth;
layui.droptree("/UserSession/GetOrgs", "#Organizations", "#OrganizationIds"); layui.droptree("/UserSession/GetOrgs", "#Organizations", "#OrganizationIds");
$("#menus").loadMenus();
//主列表加载,可反复调用进行刷新 //主列表加载,可反复调用进行刷新
var config= {}; //table的参数如搜索key点击tree的id var config= {}; //table的参数如搜索key点击tree的id
var mainList = function (options) { var mainList = function (options) {

View File

@ -11,6 +11,7 @@
using System; using System;
using System.Web.Http; using System.Web.Http;
using Infrastructure;
using Infrastructure.Cache; using Infrastructure.Cache;
using OpenAuth.App; using OpenAuth.App;
using OpenAuth.App.SSO; using OpenAuth.App.SSO;
@ -28,20 +29,26 @@ namespace OpenAuth.WebApi.Areas.SSO.Controllers
public AuthorizeApp _app { get; set; } public AuthorizeApp _app { get; set; }
private ObjCacheProvider<UserAuthSession> _objCacheProvider = new ObjCacheProvider<UserAuthSession>(); private ObjCacheProvider<UserAuthSession> _objCacheProvider = new ObjCacheProvider<UserAuthSession>();
/// <summary> /// <summary>
/// 检验token是否有效 /// 检验token是否有效
/// </summary> /// </summary>
/// <param name="token">The token.</param> /// <param name="token">The token.</param>
/// <param name="requestid">备用参数.</param> /// <param name="requestid">备用参数.</param>
[System.Web.Mvc.HttpGet] [System.Web.Mvc.HttpGet]
public bool GetStatus(string token, string requestid = "") public Response<bool> GetStatus(string token, string requestid = "")
{ {
if (_objCacheProvider.GetCache(token) != null) var result = new Response<bool>();
try
{ {
return true; result.Result = _objCacheProvider.GetCache(token) != null;
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
} }
return false; return result;
} }
/// <summary> /// <summary>
@ -50,15 +57,25 @@ namespace OpenAuth.WebApi.Areas.SSO.Controllers
/// <param name="token"></param> /// <param name="token"></param>
/// <param name="requestid">备用参数.</param> /// <param name="requestid">备用参数.</param>
[System.Web.Mvc.HttpGet] [System.Web.Mvc.HttpGet]
public UserWithAccessedCtrls GetUser(string token, string requestid = "") public Response<UserWithAccessedCtrls> GetUser(string token, string requestid = "")
{ {
string userName = GetUserName(token, requestid); var result = new Response<UserWithAccessedCtrls>();
if (!string.IsNullOrEmpty(userName)) try
{ {
return _app.GetAccessedControls(userName); var user = _objCacheProvider.GetCache(token);
if (user != null)
{
result.Result = _app.GetAccessedControls(user.UserName);
}
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
} }
return null; return result;
} }
/// <summary> /// <summary>
@ -67,15 +84,24 @@ namespace OpenAuth.WebApi.Areas.SSO.Controllers
/// <param name="token"></param> /// <param name="token"></param>
/// <param name="requestid">备用参数.</param> /// <param name="requestid">备用参数.</param>
[System.Web.Mvc.HttpGet] [System.Web.Mvc.HttpGet]
public string GetUserName(string token, string requestid = "") public Response<string> GetUserName(string token, string requestid = "")
{ {
var user = _objCacheProvider.GetCache(token); var result = new Response<string>();
if (user != null) try
{ {
return user.UserName; var user = _objCacheProvider.GetCache(token);
if (user != null)
{
result.Result = user.UserName;
}
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
} }
return string.Empty; return result;
} }
/// <summary> /// <summary>
@ -85,8 +111,19 @@ namespace OpenAuth.WebApi.Areas.SSO.Controllers
/// <returns></returns> /// <returns></returns>
[System.Web.Mvc.HttpPost] [System.Web.Mvc.HttpPost]
public LoginResult Login(PassportLoginRequest request) public LoginResult Login(PassportLoginRequest request)
{ {
return SSOAuthUtil.Parse(request); var result = new LoginResult();
try
{
result = SSOAuthUtil.Parse(request);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
} }
/// <summary> /// <summary>
@ -95,7 +132,7 @@ namespace OpenAuth.WebApi.Areas.SSO.Controllers
/// <param name="token"></param> /// <param name="token"></param>
/// <param name="requestid">备用参数.</param> /// <param name="requestid">备用参数.</param>
[System.Web.Mvc.HttpPost] [System.Web.Mvc.HttpPost]
public bool Logout(string token, string requestid="") public bool Logout(string token, string requestid = "")
{ {
try try
{ {