一步一步Asp.Net MVC系列_权限管理设计起始篇

前一段时间,写了一步一步asp.net的一系列博客,最近,也快要大四,忙着准备找个工作,这也算是最后一个假期了,这个系列可能不太长, 尽量写完.还是多学习,少扯淡的风格,我们的学习还好继续,现在开始学习asp.net MVC系列,基础知识,大家看博客园相关的一系列就可以了,我们在这里学一下一个权限管理的设计.我采用的是Asp.net MVC+EF+N层的方式,顺便加入点spring.net注入的部分,当然我们最主要的还是关于权限设计的部分.而架构,咱也没学过太复杂的架构,我们 还是从最常用的三层架构进行扩展.  
首先,我们要讲解一下关于项目的搭建部分.我们的项目主要分为5部分,业务逻辑层,数据访问层,界面层,领域模型层以及一个公共类的部分.
当然,我们要先建立一个工程,并建立相应的解决方案文件夹,并且保持清晰程度,我们在工程加上前缀(最好是公司前缀)后面加上部分.

然后在每个解决方案文件夹下面建立响应的项目,

这里主要是:
业务逻辑层:
TZHSWEET.IBLL:业务逻辑层接口
TZHSWEET.BLL:业务逻辑层实现
数据访问层:
TZHSWEET.IDao:数据访问层接口
TZHSWEET.Dao:数据访问层实现
领域模型层:
TZHSWEET.Entity:这是EF建立的模型
TZHSWEET.ViewModel:这个是用来传递UI层和业务逻辑层的相关模型对象
界面层:
TZHSWEET.WebUI:主要的MVC和LigerUI实现的界面部分
TZHSWEET.UI:关于MVC公共UI定义的部分
公共类库部分:
TZHSWEET.CacheStorage主要是常用的缓存
TZHSWEET.Common主要是一些公共类实现等等
这里仅仅是三层架构按照我自己的想法做了一个适应性扩展,呵呵.
EF不用说了,这里只是一个简单的应用

在这里我先讲解关于Idao和Dao部分
我们的目标是"0"增删改查的数据访问层实现,
主要是靠EF的定义通用的增删改查,然后其他类继承增删改查接口和相应的自定义子类接口,实现扩展.
首先,我们从以前写代码的经验知道,我们的Dao主要是做增删改查等方面,我们就先定义一个公共的接口,叫做IBaseDao,这个接口定义泛型的增删改查,
  1:   /*  作者:       tianzh
  2:   *  创建时间:   2012/7/16 11:01:34
  3:   *
  4:   */
  5:  using System;
  6:  using System.Collections.Generic;
  7:  using System.Linq;
  8:  using System.Text;
  9:  using System.Data.Objects;
 10:  
 11:  namespace TZHSWEET.IDao
 12:  {
 13:     public interface IBaseDao<T>// where T:class //限制class
 14:      {
 15:          #region 查询普通实现方案(基于Lambda表达式的Where查询)
 16:          /// <summary>
 17:          /// 获取所有Entity
 18:          /// </summary>
 19:          /// <param name="exp">Lambda条件的where</param>
 20:          /// <returns></returns>
 21:          IEnumerable<T> GetEntities(Func<T, bool> exp);
 22:          
 23:          /// <summary>
 24:          /// 计算总个数(分页)
 25:          /// </summary>
 26:          /// <param name="exp">Lambda条件的where</param>
 27:          /// <returns></returns>
 28:          int GetEntitiesCount(Func<T, bool> exp);
 29:        
 30:          /// <summary>
 31:          /// 分页查询(Linq分页方式)
 32:          /// </summary>
 33:          /// <param name="pageNumber">当前页</param>
 34:          /// <param name="pageSize">页码</param>
 35:          /// <param name="orderName">lambda排序名称</param>
 36:          /// <param name="sortOrder">排序(升序or降序)</param>
 37:          /// <param name="exp">lambda查询条件where</param>
 38:          /// <returns></returns>
 39:          IEnumerable<T> GetEntitiesForPaging(int pageNumber, int pageSize, Func<T, string> orderName, string sortOrder, Func<T, bool> exp);
 40:        
 41:          /// <summary>
 42:          /// 根据条件查找
 43:          /// </summary>
 44:          /// <param name="exp">lambda查询条件where</param>
 45:          /// <returns></returns>