开发工具与关键技术: MVC
作者:罗培发 ;年级:1903 ;撰写时间: 2020 年 9 月6日
文献编号: 归档时间: 年 月 日
权限的应用
开发工具与关键技术: MVC
作者:罗培发
撰写时间:2020.9.6
1、获取页面全部菜单
var dirIdModlarName = {
"PNR": "PNR",
"电子票证": "ELectromicTicket",
"统计功能": "Statistic",
"其他": "Other",
"系统维护": "SystemManagement",
"PNR预约": "PNRAppointment",
"PNR查询": "PNRQuery",
"订单查询": "SelectOrder",
"行程显示": "StrokeDisplay",
"免费出票": "FreeTickets",
"票证查询/修改": "TicketModify",
"代理人票证查询": "AgentTicketQuery",
"电子客票打印换开": "TicketPrint",
"票证历史记录查询": "TicketHistoryQuery",
"旅客电子票查询": "TravelHistoryQuery",
"销售报告统计": "SalesReportStatistics",
"支付统计": "PaymentStatistics",
"运输数据查询统计": "TDQstatistics",
"虚拟账户查询": "VirAccountQuery",
"开通工号": "OpenOffNumber",
"用户资料维护": "UserDataMaintain",
"票证下发": "IssuanceTicket",
"导出AR数据": "ExportARdata",
"导出LK数据": "ExportLKdata",
"航班维护": "FlightMaintain",
"密码修改": "ModifyPassword",
"角色维护": "RoleMaintain",
"三字代码维护": "TCCMaintain",
"舱位等级维护": "ClassMaintain",
"票号维护": "TicketNumMaintain",
}
2、删除没有权限的对应的菜单
$.post("/Main/SelectModularJurisdiction", { time: (new Date()).getTime().toString() }, function (objModulars) {
console.log(objModulars);
if (objModulars == "") {
window.location.href = "/";
} else {
for (key in objModulars) {
var obj = objModulars[key];
if (obj.ID == 0) {
var modularName = obj.ModularName;
var elId = dirIdModlarName[modularName];
console.log(elId);
$("#" + elId).remove();
}
}
}
});
3、获取请求的URL
string url = filterContext.HttpContext.Request.Url.AbsolutePath;
(2)检查是否登录,跳过登录检查URL
if (url == "/" || url == "/Main/Login" || url == "/Main/CreateValidImage" || url == "/Main/UserLogin")
{
return;
}
loginUserID = Convert.ToInt32(filterContext.HttpContext.Session["userID"].ToString());
(3)权限检查
if (url == "/" || url.Contains("/Main/"))
{
return;
}
第一种:获取在登录时 查询的权限模块信息
List<ModuleVo> userModules = filterContext.HttpContext.Session["userModules"] as List<ModuleVo>;
第二种,每一次请求都查询一遍权限
根据/分割 -> 0-空字符串,1-区域名称,2-控制器名称,3-Action
string[] strUrls = url.Split('/');
if (strUrls.Length >= 4)
{
string areaName = strUrls[1];//获取区域名称
string controllerName = strUrls[2]; //获取控制器名称
//一般情况权限处理--判断 区域和 控制器
int exist = userModules.Count(o => o.moduleName == controllerName && o.parentModule.moduleName == areaName);
if (exist == 0)
{
filterContext.HttpContext.Response.Redirect("/Main/NoPermission");
}
注:前面获取的权限菜单,必须的去数据库验证名称是否相同,不相同!权限就无法实现。
还有,必须得在方法前执行。