我记录网站综合系统 -- 技术原理解析[10:PermissionChecker流程]

本文介绍了一个用于检查页面布局访问权限的PermissionChecker组件。该组件通过遍历页面的所有布局路径,并调用相应的控制器进行权限验证,确保每个页面元素的安全访问。此外,还提到了wojilu框架的一些特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源代码位置:\Web\Mvc\Processors:PermissionChecker.cs

Config ->

    wojilu.Web.Mvc.CoreHandler.ProcessRequest - >

          wojilu.Web.Mvc.CoreHandler.ProcessRequest: ProcessContext.Begin ->

               RouteProcess
                    InitContextProcess

        ActionMethodChecker

                      ForbiddenActionChecker

                      LoginActionChecker 
                      HttpMethodChecker

                      PermissionChecker

最后一个checker的位置在生成页面之前,这个checker也是对于做成页面的Layout使用许可的预检查。

 

 1     public override void Process( ProcessContext context ) {
 2 
 3             MvcEventPublisher.Instance.BeginCheckPermission( context.ctx );
 4             if (context.ctx.utils.isSkipCurrentProcessor()) return;
 5 
 6             MvcContext ctx = context.ctx;
 7 
 8             IList paths = ctx.utils.getLayoutPath();
 9             for (int i = paths.Count - 1; i >= 0; i--) {
10 
11                 ControllerBase controller = ControllerFactory.FindSecurityController( paths[i].ToString(), ctx );
12                 if (controller == nullcontinue;
13 
14                 if (ctx.controller.utils.isCheckPermission( controller.GetType() )) {
15                     controller.CheckPermission();
16                 }
17 
18                 if (ctx.utils.isEnd()) {
19                     String msg = controller.utils.getActionResult();
20                     context.endMsg( checkFrame( ctx, msg ) );
21                     return;
22                 }
23             }
24 
25             context.getController().CheckPermission();
26             if (ctx.utils.isEnd()) {
27                 context.endMsg( checkFrame( ctx, context.getController().utils.getActionResult() ) );
28                 return;
29             }
30 
31         }

 ctx.utils.getLayoutPath:

1         /// <summary>
2         /// 获取所有的布局文件的路径
3         /// </summary>
4         /// <returns></returns>
5         public IList getLayoutPath() {
6             if (_layoutPath == null) _layoutPath = PathHelper.GetPathList( ctx.route.getRootNamespace(), ctx.controller.GetType().Namespace );
7             return _layoutPath; 
8         }

任何一个页面可以看做小的画面元素的组合,小的画面元素可以看做更小的画面元素的组合。wojilu将这样一个个基本元素称之为Layout。页面就是一个个Layout的嵌套组合。这些Layout的访问权限就在这里检查。可能大部分说,这样的检查是多余的,但是,在日益猖獗的黑客行为上,严格的安全是第一位的。

这篇,其实可以说的东西不多,毕竟只是一个小的Processor。

下面来总结一下wojilu的特点

1.所有的processor在执行前,都做了广播操作,以便系统的其他部分可以得到通知,做一些过滤。

2.所有的Processor都可以跳过。

3.所有的页面请求都统一放在Context容器里面。

4.我记录的安全检查,很多是基于方法特性批注的,这个和MS的MVC有点像。

 

下一篇开始讲述wojilu的页面引擎。

我记录1.7版,在长达5个月的开发和测试后,将在6月底推出(不过,介于以前跳票的经验,可能这次还要跳票,作者是个注重品质的老实人),敬请期待。

转载于:https://www.cnblogs.com/TextEditor/archive/2011/06/18/2083938.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值