力软 Learun 是如何验证权限的

管理员密码 system 0000

 [HandlerLogin(FilterMode.Enforce)]
    public abstract class MvcControllerBase : Controller
D:\BaiduNetdiskDownload\010-力软框架官方版本源码\010-力软框架官方版本源码\release\Learun.Application.Web\App_Start\01 Handler\MvcControllerBase.cs
D:\BaiduNetdiskDownload\010-力软框架官方版本源码\010-力软框架官方版本源码\release\Learun.Application.Web\App_Start\01 Handler\HandlerLoginAttribute.cs

 

 [HandlerLogin(FilterMode.Enforce)]
    public abstract class MvcControllerBase : Controller
    {
        #region 日志操作
        /// <summary>
        /// 日志对象实体
        /// </summary>
        private Log _logger;
        /// <summary>
        /// 日志操作
        /// </summary>
        public Log Logger
        {
            get { return _logger ?? (_logger = LogFactory.GetLogger(this.GetType().ToString())); }
        }
        #endregion

        #region 请求响应
        /// <summary>
        /// 返回成功消息
        /// </summary>
        /// <param name="data">数据</param>
        /// <returns></returns>
        protected virtual ActionResult ToJsonResult(object data)
        {
            return Content(data.ToJson());
        }
        /// <summary>
        /// 返回成功消息
        /// </summary>
        /// <param name="info">消息</param>
        /// <returns></returns>
        protected virtual ActionResult Success(string info)
        {
            return Content(new ResParameter { code = ResponseCode.success, info = info, data = new object { } }.ToJson());
        }
        /// <summary>
        /// 返回成功消息
        /// </summary>
        /// <param name="data">数据</param>
        /// <returns></returns>
        protected virtual ActionResult SuccessString(string data)
        {
            return Content(new ResParameter { code = ResponseCode.success, info = "响应成功", data = data }.ToJson());
        }
        /// <summary>
        /// 返回成功数据
        /// </summary>
        /// <param name="data">数据</param>
        /// <returns></returns>
        protected virtual ActionResult Success(object data)
        {
            return Content(new ResParameter { code = ResponseCode.success, info = "响应成功", data = data }.ToJson());
        }
        /// <summary>
        /// 返回成功消息
        /// </summary>
        /// <param name="info">消息</param>
        /// <param name="data">数据</param>
        /// <returns></returns>
        protected virtual ActionResult Success(string info, object data)
        {
            return Content(new ResParameter { code = ResponseCode.success, info = info, data = data }.ToJson());
        }

        /// <summary>
        /// 带操作日志
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        protected virtual ActionResult Success(string info, string title, OperationType type, string keyValue, string content)
        {
            OperateLogModel operateLogModel = new OperateLogModel();
            operateLogModel.title = title;
            operateLogModel.type = type;
            operateLogModel.url = (string)WebHelper.GetHttpItems("currentUrl");
            operateLogModel.sourceObjectId = keyValue;
            operateLogModel.sourceContentJson = content;

            OperatorHelper.Instance.WriteOperateLog(operateLogModel);

            return Content(new ResParameter { code = ResponseCode.success, info = info, data = new object { } }.ToJson());
        }

        /// <summary>
        /// 返回失败消息
        /// </summary>
        /// <param name="info">消息</param>
        /// <returns></returns>
        protected virtual ActionResult Fail(string info)
        {
            return Content(new ResParameter { code = ResponseCode.fail, info = info }.ToJson());
        }
        /// <summary>
        /// 返回失败消息
        /// </summary>
        /// <param name="info">消息</param>
        /// <param name="data">消息</param>
        /// <returns></returns>
        protected virtual ActionResult Fail(string info, object data)
        {
            return Content(new ResParameter { code = ResponseCode.fail, info = info, data = data }.ToJson());
        }
        #endregion
    }
}
using Learun.Application.Base.AuthorizeModule;
using Learun.Util;
using Learun.Util.Operat;
using System.Web.Mvc;

namespace Learun.Application.Web
{
    /// <summary>
    /// 版 本 Learun-ADMS V7.0.3 力软敏捷开发框架
    /// Copyright (c) 2013-2018 上海力软信息技术有限公司
    /// 创建人:力软-框架开发组
    /// 日 期:2017.03.08
    /// 描 述:登录认证(会话验证组件)
    /// </summary>
    public class HandlerLoginAttribute : AuthorizeAttribute
    {
        private DataAuthorizeIBLL dataAuthorizeIBLL = new DataAuthorizeBLL();
        private FilterMode _customMode;
        /// <summary>默认构造</summary>
        /// <param name="Mode">认证模式</param>
        public HandlerLoginAttribute(FilterMode Mode)
        {
            _customMode = Mode;
        }
        /// <summary>
        /// 响应前执行登录验证,查看当前用户是否有效 
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            // 登录拦截是否忽略
            if (_customMode == FilterMode.Ignore)
            {
                return;
            }

            var request = filterContext.HttpContext.Request;
            string account = "";
            if (!request.Headers["account"].IsEmpty())
            {
                account = request.Headers["account"].ToString();
            }


            var areaName = filterContext.RouteData.DataTokens["area"] + "/";            //获取当前区域
            var controllerName = filterContext.RouteData.Values["controller"] + "/";    //获取控制器
            var action = filterContext.RouteData.Values["Action"];                      //获取当前Action
            string currentUrl = "/" + areaName + controllerName + action;               //拼接构造完整url
            WebHelper.AddHttpItems("currentUrl", currentUrl);

            var _currentUrl = WebHelper.GetHttpItems("currentUrl");
            if (_currentUrl.IsEmpty())
            {
                WebHelper.AddHttpItems("currentUrl", currentUrl);
            }
            else
            {
                WebHelper.UpdateHttpItem("currentUrl", currentUrl);
            }

            // 验证登录状态
            int res = OperatorHelper.Instance.IsOnLine(account).stateCode;
            if (res != 1)// 登录过期或者未登录
            {
                if (res == 2)
                {
                    if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
                    {
                        filterContext.Result = new ContentResult { Content = new ResParameter { code = ResponseCode.nologin, info = "other" }.ToJson() };
                    }
                    else
                    {
                        filterContext.Result = new RedirectResult("~/Login/Index?error=other");
                    }
                    return;

                }



                if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
                {
                    filterContext.Result = new ContentResult { Content = new ResParameter { code = ResponseCode.nologin, info = "nologin" }.ToJson() };
                }
                else
                {
                    filterContext.Result = new RedirectResult("~/Login/Index");
                }
                return;
            }
            // IP过滤
            if (!this.FilterIP())
            {
                if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
                {
                    filterContext.Result = new ContentResult { Content = new ResParameter { code = ResponseCode.nologin, info = "noip" }.ToJson() };
                }
                else
                {
                    filterContext.Result = new RedirectResult("~/Login/Index?error=ip");
                }
                return;
            }
            // 时段过滤
            if (!this.FilterTime())
            {
                if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
                {
                    filterContext.Result = new ContentResult { Content = new ResParameter { code = ResponseCode.nologin, info = "notime" }.ToJson() };
                }
                else
                {
                    filterContext.Result = new RedirectResult("~/Login/Index?error=time");
                }
                return;
            }

            // 判断当前接口是否需要加载数据权限
            if (!this.DataAuthorize(currentUrl))
            {
                filterContext.Result = new ContentResult { Content = new ResParameter { code = ResponseCode.fail, info = "没有该数据权限" }.ToJson() };
                return;
            }
        }
        /// <summary>
        /// IP过滤
        /// </summary>
        /// <returns></returns>
        private bool FilterIP()
        {
            bool isFilterIP = Config.GetValue("FilterIP").ToBool();
            if (isFilterIP == true)
            {
                return new FilterIPBLL().FilterIP();
            }
            return true;
        }
        /// <summary>
        /// 时段过滤
        /// </summary>
        /// <returns></returns>
        private bool FilterTime()
        {
            bool isFilterIP = Config.GetValue("FilterTime").ToBool();
            if (isFilterIP == true)
            {
                return new FilterTimeBLL().FilterTime();
            }
            return true;
        }
        /// <summary>
        /// 执行权限认证
        /// </summary>
        /// <param name="currentUrl">当前连接</param>
        /// <returns></returns>
        private bool DataAuthorize(string currentUrl)
        {
            return dataAuthorizeIBLL.SetWhereSql(currentUrl,false);
        }
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
快速开发框架.源码 带数据库 LeaRun_6.3.4模板 开发环境 :Asp.net + VS2010/2012/2013 + C# + SQL2008/2005/2012 包含:源码+开发文档 信息化系统快速开发框架的使用,大大地缩短了开发周期,提高了软件质量,同时也降低企业对软件研发人员编码水平要求。使得软件企业减少研发的时间和成本以及提升用户体验,从而能在竞争激烈的软件行业里脱颖而出,打造出优秀的软件产品,赢得客户的信赖。同样软件工程师有一套这样的开发神器在手,开发软件效率卓越,界面炫酷,定能赢得上司的赏识,升职加薪不在话下,迎娶白富美登上人生的巅峰也指日可待。 界面炫酷,用户体验好,3种界面风格16套皮肤一键切换、用户体验会让你爱不释手 远离加班!一套能节约80%开发时间的快速开发框架! 动态接口、动态表单、动态视图、动态Excel导入模板,都可以动态配置,小声点再动态老板就会自己干,你要失业了! 灵活、细粒度的权限控制,能满足各种应用场合! 专业的研发团队,优质的售后服务,堪称行业典范、业界良心! 帮企业快速地实现各种通用功能,结合系统原有的通用权限管理功能! 快速地开发出各种项目应用系统。让企业开发一个系统变得非常轻松! 符合RBAC 灵活不仅符合国际通用标准,又能满足国内的小型软件项目的灵活设置需求! 文档齐全 支持二次开发提供完善的接口函数调用说明、开放接口、开放源码、开放数据库结构设计! 分层理念 SOA理念程序可以采用不同的实施策略、架构需求、方便维护、方便扩展! 有价值且优秀的产品,这样您就有了市场需求了! 适用于OA、网站、电子政务、ERP、CRM等基于B/S架构的应用软件系统的快速开发框架! 支持多开发语言 多界面支持B/S、C/S系统,可以支持Java、PHP 等多种 语言开发项目的接口功能 !
1、Microsoft.Bussines.CommonProxy.dll 框架核心API库 包括:常用加密解密,缓存集群,IP地址库,Html Parse,金额转换,GoogleMap Api,Google PR,ImageMagick(图片处理),SharpZipLib压缩解压缩,中文分词核心库 2、WebSystem.Framework.dll 框架核心API库 包括:与Discuz相关的集成登陆,Evaluator计算表达式,Excel相关处理,Pdf处理,Msmq消息队列处理,ThreadPool(线程池,用于并发处理) 3、FrameWork.Extension.Toolkit.dll 针对DotNet基类扩展方法核心库 4、WebSystem.Framework.DAO.dll 数据访问层核心库:包括 DbHelperSQL,MySqlDbHelper,AccessDbHelper,实体层,数据库连接池 等 5、WebSystem.WebControls.dll 常用服务器控件核心库 主要提供后台开发使用 6、Business.Processing.dll 业务处理核心类库(定义前后台业务处理基类,支付,手机短信,序列号,用户等级,查询中心,报表处理中心等) 2.0新增加了 1、WebSystem.FrameWork.SearchEngine.dll 搜索引擎核心处理类库(提供并行中文分词、分布式并行采集器) 增加集成了中科院中文分词和盘古中文分词,并进行了并行改进,大大提高了分词性能 2、另外WebSystem.WebControls.dll 中新增加了100多个各类AJAX控件,另外集成并改写了全套extjs库,同时提供了一个WEB ERP的DEMO 3、另外在WebSystem.Framework.DAO.dll 数据访问层核心库,中增加了对Oracle、Sqlite、的处理功能,对所有的数据访问层的CRUD均增加了相关的 XML处理功能 也就是说所有的CRUD操作只要提供对应的实体和对应的XML数据即可 比如: /// <summary> /// 通过入Object的主键做为删除 主键为keys 的xml数据,删除后在重新插入xml中的数据 /// </summary> /// <param name="o">实体对象</param> /// <param name="xml">xml数据</param> /// <param name="keys">主键列表</param> /// <returns></returns> public List<string> GetDeleteAndInsertXmlSql(Object o, string xml, List<string> keys) 4、增加集成了盘古中文分词 更多范例请参考 http://hi.baidu.com/earthsearch 注:使用范例时:请先引用所有的DLL类库 有任何疑问请与我本人联系 QQ 99923309 QQ群:
在Visual Studio 2003下开发网站的都知道ASP.NET 1.1网站生成后都是一个唯一命名的程序集(项目名称.DLL),但是这种情况在Visual Studio 2005的网站开发中不见了。Visual Studio 2005给我们提供了“发布网站”这样方便的功能,不用在像以前一样COPY的部署,但是采用其“发布网站”的功能,会在站点的BIN目录中产生App_Code.compiled,App_Code.dll,App_Web_xxxxxx.dll,项目名称.dll等等这样的程序集,如果不采用预编译的方式那么产生的文件会更加的多,因为很多都是随机命名也没有什么规律可言;这样会给那些想COPY更新的人带来不便,因为原来的文件不能被覆盖,需要先删除再COPY;有很多时候可能就是更新了后台代码,直接生成项目或是WEB的程序集,像以前一样直接覆盖DLL的方式也很简单。 传统的生成或是发布网站的方式没有任何问题,当使用Web Deployment Projects工具生成唯一程序集时出现了错误信息“Aspnet_merge.exe Exited with Code 1”(Aspnet_merge.exe 退出,错误代码1),这样的信息根本无法让我们办断到底是哪里出了问题。好,下面依次打开VS 2005的工具-选项-项目和解决方案-生成并运行,设置“MSBuild 项目生成输出详细信息”,选择“详细”。再次生成Web Deployment Projects项目,注意“输出”框内的信息现在变得非常丰富了,最后导致无法编译的问题终于出来了“An error occurred when merging assemblies: ILMerge.Merge: ERROR!!: Duplicate type ‘_Default’ found in assembly 'App_Web_k5hhsnh0'”,它的意思是说在程序集中发现了相同的类型_Default,经过我检查确实在我们的WEB项目中存在了两个_Default类(在不同的目录中),这样的问题通过一般的生成完成和发布网站肯定都是检测不出来的,运行也是正常的。VS 2005的WEB项目默认的把命名空间给去掉了,可以手动增加一个命名空间,cs代码中加入namespace的语句块,另外别忘了在aspx文件的<@page>的Inherits中写入对应的[namespace].[类名];经过这样的操作再次编译成一个程序集就没有问题了。或者直接把aspx页面的Inherits改成“路径_文件名”,cs文件的类名也改成同样的名称;可是如果一个网站有很多的目录,很多的文件,而且又有多个客户版本,那修改起来就非常的麻烦,为此特意开发了该工具,大大提高了工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值