NopCommerce 3. Controller 分析
1. 继承关系,3个abstract类
System.Web.Mvc.Controller
Nop.Web.Framework.Controllers.BaseController
Nop.Admin.Controllers.BaseAdminController
2. BaseController
1. RenderPartialViewToString()
将Viewname对应的页面加载成string
a. IViewEngine.FindPartialView() 来获取ViewEngineReult,够着viewcontext 实例,作为Render()的参数
b.IView.Render() 来加载到streamwriter中
c. streamwriter.Tostring()返回数据
可以扩展下压缩html的方法
html=Regex.Replace(html,”\\n+\\s+”,string.empty);
html=Regex.Replace(html,”\\n+”,string.empty);
html=html.trim();
2. 各种发送消息的方法,主要是配合View来显示后台的消息
是利用ViewData,TempData来传递数据,然后来View中读取循环显示
3. AddLocales()
3. BaseAdminController
1. 无权限访问返回错误的方法
a. ActionResult AccessDeniedView();
b. JsonResult AccessDeniedKendoGridJson();
4. StoreAddressAttribute
做各种判断,如果不符合则return
只记录Get请求的Ip地址,更新Customer表中LastIpAddress字段
5. CustomerLastActivityAttribute
记录最后登录的时间
更新最后活动时,1分钟内数据不更新,防止频繁修改,更新Customer表中LastActivityDateUtc字段
6. StoreLastVisitedPageAttribute
记录最后查看的页面
保存在GenericAttribute表中,需要单独启动是否记录
7. ValidatePasswordAttribute
检验用户是不是需要定时修改密码,默认过期时间在setting表中的PasswordLifetime 字段中设置,默认是90天
如果未设置密码的用户,则下次请求时立即要求修改密码
修改密码就是强制调整到/CustomerChangePassword页面中
8. NopHttpsRequirementAttribute
对get请求判断强制跳转ssl的地址,在setting表中ForceSslForAllPages中设置是否启用对所有页面强制跳转ssl
先判断当前请求是否是ssl,再查看当前的店是否支持ssl,如果支持的话,则跳转到ssl地址
如果setting中未启用该选项,则使用301跳转到当前页面,这不是多此一举吗?301 应该有玄机.
9. AdminValidateIpAddress
限制Admin后台网页不被其他ip访问,保护后台安全
在setting表中的AdminAreaAllowedIpAddresses属性中设置允许访问的ip地址,如果AdminAreaAllowedIpAddresses不为空,此时判断当前request的ip地址是否在其中,不在其中则跳转到/admin/security/accessdenied
10. AdminAuthorizeAttribute:IAuthorizationFilter
继承自IAuthorizationFilter 接口,需要实现void OnAuthorization(AuthorizationContext filterContext);
可以在构造函数中指定bool 来跳过验证
核心方法OnAuthorization方法中,首先在IsAdminPageRequested()方法中判断Controller或Action上是否定义了AdminAuthorize属性,
如果没有权限访问该页面,则返回401 HandleUnauthorizedRequest
权限是定义在PermissionRecord 中,根据sysname 和roleId 来判断权限
首先是每个customer和role有一个多对多的关联
然后是每个role和permissionrecord有一个多对多的关联
验证权限就是遍历该用户的每一个role,然后判断这个role对应的permissionrecord集合中是否包含当前这个页面访问所需要的权限
相关的表有
- Customer-客户信息表
- CustomerRole-客户角色表
- Customer_CustomerRole_Mapping-用户角色表映射
- PermissionRecord-权限记录表
- PermissionRecord_Role_Mapping-角色权限记录关系表
11. AdminAntiForgeryAttribute:IAuthorizationFilter
是对ValidateAntiForgeryTokenAttribute属性的封装,但是新增了配置的功能
可以在setting表中的EnableXsrfProtectionForAdminArea中配置
这个封装的不错,有灵活性,还能有效利用系统原有代码
12. AdminVendorValidation:IAuthorizationFilter
阻止非商户角色的用户登录后台
五种角色,每种角色对应不同的permissionrecord,就可以决定哪些页面可以访问了
- 管理员
- 论坛版主
- 注册用户
- 访客
- 商户
NopCommerce 3. Controller 分析的更多相关文章
- k8s replicaset controller分析(1)-初始化与启动分析
replicaset controller分析 replicaset controller简介 replicaset controller是kube-controller-manager组件中众多控制 ...
- k8s replicaset controller分析(2)-核心处理逻辑分析
replicaset controller分析 replicaset controller简介 replicaset controller是kube-controller-manager组件中众多控制 ...
- k8s replicaset controller 分析(3)-expectations 机制分析
replicaset controller分析 replicaset controller简介 replicaset controller是kube-controller-manager组件中众多控制 ...
- k8s endpoints controller分析
k8s endpoints controller分析 endpoints controller简介 endpoints controller是kube-controller-manager组件中众多控 ...
- kube-controller-manager源码分析-AD controller分析
kubernetes ceph-csi分析目录导航 概述 kube-controller-manager组件中,有两个controller与存储相关,分别是PV controller与AD contr ...
- kube-controller-manager源码分析-PV controller分析
kubernetes ceph-csi分析目录导航 概述 kube-controller-manager组件中,有两个controller与存储相关,分别是PV controller与AD contr ...
- NopCommerce源码分析ContainerBuilder builder.Update(container)
/// <summary> /// Register dependencies /// </summary> /// <param name="config&q ...
- k8s deployment controller源码分析
deployment controller简介 deployment controller是kube-controller-manager组件中众多控制器中的一个,是 deployment 资源对象的 ...
- k8s statefulset controller源码分析
statefulset controller分析 statefulset简介 statefulset是Kubernetes提供的管理有状态应用的对象,而deployment用于管理无状态应用. 有状态 ...
随机推荐
- 第二次项目冲刺(Beta阶段)5.24
1.提供当天站立式会议照片一张 会议内容: ①检查前一天的任务情况. ②制定新一轮的任务计划. 2.每个人的工作 (1)工作安排 队员 今日进展 明日安排 王婧 #63Web输出以文件名为标题 #63 ...
- 团队作业8——第二次项目冲刺(Beta阶段)5.27
1.当天站立式会议照片 会议内容: 本次会议为第七次会议 本次会议在陆大楼2楼召开,本次会议内容: ①:检查总结上次任务完成情况 ②:安排今天的分工 ③:对昨天的问题进行讨论 2. 每个人的工作 (有 ...
- 团队作业8——第二次项目冲刺(Beta阶段) 5.19
Day1--5.19 1.展开站立式会议(拍摄者:武健男): 会议内容:(1)新成员自我介绍,使大家能更快熟悉并一起合作. (2)由于我们之前的项目经理去了别的小组,所以我们投票选取新成员林乔桦作为我 ...
- 201521123039《java程序设计》第五周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句 ...
- 201521123020《java程序设计》第1周学习总结
1.本周学习总结 1.对JAVA的历史发展的了解 2.了解Java与C/C++的区别,Java语言所写程序较为繁琐,C/C++较为简洁. 3.安装java和jdk 2.书面作业 Q1.为什么java程 ...
- Java课程设计博客(团队)
Java课程设计博客(团队) 1. 团队/项目名称 使用JAVA实现简易HTTP服务器 2. 团队成员 组长:林一心 组员:张杭镖 3. 项目git地址 https://github.com/oran ...
- JSP引入 - UEditor 富文本编辑器
UEditor JSP 因为是项目第一天就导入了,现在过去一个多星期了,可能会有问题 官网:http://ueditor.baidu.com/website/ 1. 解压对应的UEditor压缩包至 ...
- delphi xe 3的EhLib 9.0 Build 9.0.033 Full Source安装
1.打开项目文件 2.全选 3.编译和buil 4.添加路径
- bookStore案例第一篇【部署开发环境、解决分类模块】
前言 巩固Servlet+JSP开发模式,做一个比较完整的小项目 成果图 该项目包含了两个部分,前台和后台. 前台用于显示 后台用于管理 该项目可分为5个模块来组成:分类模块,用户模块,图书模块,购买 ...
- 接口测试入门(4)--接口自动化测试框架 / list和map用法 / 随机选取新闻 (随机数生成) / 接口相关id映射
一.接口自动化测试框架 为了更好的组织测试方法,测试用例并且持续集成,我们选择了 java+testNG(测试用例组织)+gitlab(代码版本管理)+Jenkins(持续集成工具) 作为一整套的自 ...