TrueLove 项目感悟(二)安全、布局、架构

引言

最近这两天一直没有时间来写这个系列文章。忙着做个 Spider 来抓点东西。我们的 www.365rss.cn 刚刚起步,希望大家多去看看,支持一下。因为好几天前做完的 TrueLove 的这个模块,很多当时遇到的问题都忘记了(悔恨当时没有用笔记下来)。我这里只说说3个我现在能够回忆起来的东西。基于 Form 的安全机制、基于 Div+CSS 的网页布局、基于MVP的架构。下面听我一个部分一个部分的慢慢道来:

基于 Form 的安全机制

其实说到 Asp.net 2.0 的全新的安全模型这些老生长谈的话题我这里也没有必要多少,具体的大家可以参考 MSDN 和下面的这篇文章:ASP.NET 2.0 Membership, Roles, Forms Authentication, and Security Resources 。我这里主要想说的是网站在用到Nbear框架的时候怎么配置使用自己的Roles providers 和 Membership providers,因为如果使用 asp.net 自带的那个数据库的话一个是程序部署不方便,二是他的要求高,添加个用户密码要求巨严格,我是直接受不了。要配置基于 Nbear 数据库链接的 providers 当然必须要先配置 Nbear 的数据库链接。在web.config文件里面的<configuration>结点里面加入下面的代码:

NBear连接字符串 
<connectionStrings>
<add  name="MainDb" connectionString="Server=.\SQLEXPRESS;DataBase=TrueLove;Uid=sa;
      Pwd=passwd" providerName="NBear.Data.SqlServer9.SqlDbProvider9"/>
</connectionStrings>

这样就配置好了 NBear 的数据连接,他是连接到本地的 sqlserver 2005 express的。下面在<System.web>结点下面输入下面的代码完成对 Roles providers 和 Membership providers 的配置:

Roles providers 和 Membership providers 的配置
<!-- membership -->
<membership userIsOnlineTimeWindow="15" defaultProvider="TrueLove_MembershipProvider">
   <providers>
        <add name="TrueLove_MembershipProvider" applicationName="TrueLove" connectionStringName="MainDb" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" passwordFormat="Hashed" maxInvalidPasswordAttempts="128" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="16" passwordStrengthRegularExpression=".*" type="System.Web.Security.SqlMembershipProvider,System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
   </providers>
</membership>
<!-- roleManager --> <roleManager enabled="true" cacheRolesInCookie="true" cookieName=".TrueLove_Roles" cookieTimeout="90" defaultProvider="TrueLove_RoleProvider" createPersistentCookie="true"maxCachedResults="1000"> <providers> <add name="TrueLove_RoleProvider" applicationName="Nbear" connectionStringName="MainDb" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>  </providers> </roleManager> <!-- authentication --> <authentication mode="Forms"> <forms loginUrl="~/Login.aspx" name="TrueLove_FormsAUTH" protection="All" timeout="20160"/> </authentication>

其实很简单,就是把以前的那些 providers 的connectionStringName给设置成 NBear 数据连接的名字就ok了。还有一点我想说的因为是基于 Form 的安全机制,我们最好在开发整个系统之前就把整个系统规划以下,把所有同权限访问的文件放到同一个目录,这样便于使用 web.config 来配置权限。比如我们的所有后台管理的功能放到Admin这个文件夹,然后在文件夹下面建立一个web.config,然后配置他的内容为:

Admin目录下的web.config配置 
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
    <system.web>
        <authorization>
            <allow roles="admin" />
            <deny users="?" />
        </authorization>
    </system.web>
</configuration>

这样就只允许在 admin 这个 roles 里面的用户访问。然后再在 admin 目录下面建立一个 super 文件夹,只允许具有super权限的用户访问,里面放置一些添加删除用户之类的页面。

基于 Div+CSS 的网页布局

以前长期的做 asp 的网站,养成的老毛病,什么东西都用table td 之类的搞定了,弄得整个页面很混乱,并且和业务逻辑绑在一起。最近参考了 NBear 的startkit 和一些其他的网站,发现他们都是用 div+css 来搞的网站布局排版和样式。慢慢研究看明白了之后才知道了网站换肤是怎么实现的,原来换个 Css 文件就一切搞定。

在 asp.net 2.0 开发的时候强调一切都做成控件,然后只需要在页面上把控件拖上去组装成你想要的页面。我自己在开发的时候就把基本上所有的功能都封装成了控件,根据需求拖拽ok。我把头上的酒店搜索封装成控件,管理菜单封装成控件,n多封装的控件。我把这些控件放到以功能命名的 div 上面,这样组装起来的页面也可以用css来控制。开发的时候我列了一个表格,下面给出来,可以参考以下(列表主要是为了方便以后写css文件的时候查阅):

18B4CB8DEE84465088607B4267CC10F1_thu_thumb%5B2%5D.png

基于MVP的架构

我在开发的时候发现用三层架构做这种小型的应用确实有点大材小用而且浪费资源。不过我这个人向来“执着”,索性把它搞得更复杂些。把以前的那种三层架构升级到基于 MVP 架构的体系结构。升级过程参考了 Teddy 的文章:

http://www.cnblogs.com/teddyma/archive/2006/12/20/598546.html

我换成 MVP 架构的主要原因是我在自己写 DataObject 的时候放到了web的App_Code目录,然后把那个DataObject绑定到一个ObjectDataSource上面,发现这样系统耦合了,开始的IoC做的都是在浪费工,参考了Teddy的文章之后决定升级到MVP架构,让以前的IoC作为model来用。后来发现把DataObject写到业务逻辑的实现里面也不犯错,一样的IoC。其实后来明白了Teddy的mvp也只不过是让页面不再依赖于ServiceInterface,而是让他依赖于一个ViewInterface和IPresenterInterface,然后把实现放到PresenterImpls里面,把IPresenterInterface和PresenterImpls当成IoC配置使用,很巧妙。

总结

这篇文章写的很混乱,感觉有用的东西不多,不过都是自己在做项目的时候一些体会。刚才再看深入研究ObjectDataSource,我项目里面要用,所以下次体会的时候主要谢谢ObjectDataSource这个控件的使用和扩展。

转载于:https://www.cnblogs.com/jessezhao/archive/2007/02/05/639977.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值