设计模式的项目----权限管理系统

原创 2006年06月08日 11:34:00
 
本系统是以B/S模式架构的基于角色控制的权限管理系统,系统由本人跟标仔两人共同开发,开发工具为vs.net2003,开发语言为C#,可用于综合性网站的统一权限管理。
基于解决方案的需要,主要用到了以下五种设计模式:
为了支持对不同数据库的访问,用到抽象工厂设计模式
为了产生单一工厂,用到单件设计模式
为用户提供统一的高层接口,封装业务逻辑,使用外观设计模式
为了实现用户对密码加密的不同需求,用到策略模式
子系统使用该权限系统,不需要集成该系统,直接使用系统提供的WebService访问,使用代理模式,实现松散的耦合。
 
类模型图
 
数据库模型图
 
权限管理系统整体架构

 
本系统是基于经典的三层模式扩展的N层模
式,其中:
Web层即用户界面层,跟用户打交道的;
BLLFacade层即业务逻辑外观层,定义了
一个高层接口, Web层只需要调用该层提
供的简单接口;
BLL层即业务逻辑层,核心的业务逻辑代码都在此模块中;
IDAL层即数据访问对象接口层,为BLL层
即业务逻辑层提供一致的数据访问接口;
OracleDAL层即Oracle数据库访问对象层,实现IDAL层的所有接口;
SQLServerDAL层即SQLServer数据库访问对象层,实现IDAL层的所有接口;
Model层即数据实体层;
Utility层即通用工具类层,相当于一个工具包;
 
下面组件图显示了各个项目的调用关系
  
在本系统中,要创建的数据访问对象包括Users UserRoles Roles RolePowers Powers, Categories。在设计中,这些对象已经被抽象为对应的接口,而其实现则根据数据库的不同而有所不同。
 
 
                                                    .......
 
也就是说,创建的对象有多种类别,而每种类别又有不同的实现,这是典型的抽象工厂模式的应用场景。可以通过抽象工厂模式来解决。标准的抽象工厂模式类图如下:
using System;
namespace PowerManage
{
 /// <summary>
 /// 抽象工厂设计模式,用到了单例设计模式
 /// </summary>
 public abstract  class DALFactory
 {
  private static   DALFactory Instance=null;
  private static  readonly string DBProvider = System.Configuration.ConfigurationSettings.AppSettings["DBProvider"];
     //构造函数为保护函数,确保抽象工产只有一个实例
  protected   DALFactory()
  {
  }
  //获取抽象工程的唯一实例
  public static DALFactory  GetInstance()
  {
   if(Instance==null)
   {
    switch(DBProvider)
    {
     case "SQLServerDB":
      Instance = new SQLServerDALFactory();
      break;
     case "OracleDB":
      Instance = new OracleDALFactory();
      break;
     default:
      Instance = new SQLServerDALFactory();
      break;
    }
   }
   return  Instance;
  }
  //创建Categories数据层接口
  public abstract  PowerManage.IDAL.ICategories CreateCategories();
  //创建Powers数据层接口
  public abstract  PowerManage.IDAL.IPowers CreatePowers();
  //创建RolePowers数据层接口
  public abstract  PowerManage.IDAL.IRolePowers CreateRolePowers();
  //创建Roles数据层接口
  public abstract  PowerManage.IDAL.IRoles CreateRoles();
  //创建UserRoles数据层接口
  public abstract  PowerManage.IDAL.IUserRoles CreateUserRoles();
  //创建Users数据层接口
  public abstract  PowerManage.IDAL.IUsers CreateUsers();
 }
}
  
Oracle数据库访问对象工厂
public class OracleDALFactory:DALFactory
{
      //创建Categories数据层接口
    public override PowerManage.IDAL.ICategories CreateCategories()
    {
           return new PowerManage.OracleDAL.Categories();
    }
       ………………
}
SQLServer数据库访问对象工厂
public class SQLServerDALFactory:DALFactory
{
       //创建Categories数据层接口
     public override PowerManage.IDAL.ICategories CreateCategories()
     {
            return new PowerManage.SQLServerDAL.Categories();
     }
              ………………
}
  例如,BLL层创建SQL Server数据库的的Users对象如下:
DALFactory factory = new DALFactory.GetInstance();
private static readonly IUsers users = factory CreateUsers();
 
   权限管理系统部署好数据库后,程序一旦执行,数据访问工厂就必须确定,而Singleton设计模式是告诉您如何在你的应用程序创建一个唯一类实例的全局对象,也就是说,这个对象只能被实例化一次,这个对象同时提供一个访问它的一个全局的访问点。这里的数据访问工厂只能被实例化一次。
标准的单件模式类图如下
策略模式
 /// <summary>
 /// 加密策略接口
 /// </summary>
 public interface EncryptStrategy
 {
  //对字符串进行密钥加密
   string Encrypting(string Source, string Key);
  /// <summary>
  /// 对字符串进行密钥解密
  /// </summary>
   string Decrypting(string Source, string Key) ;
 }
外观模式
 
代理模式
  
using System.Diagnostics;
using System.Xml.Serialization;
using System;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Web.Services;

/// <remarks/>
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="UserSoap", Namespace="http://tempuri.org/")]
public class WebServiceUserProxy : System.Web.Services.Protocols.SoapHttpClientProtocol
{
   
 /// <remarks/>
 public WebServiceUserProxy()
 {
  this.Url = "http://localhost/Web/Service/User.asmx";
 }
   
 /// <remarks/>
 [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/Login", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
 public string Login(string UserName, string Password, string Category)
 {
  object[] results = this.Invoke("Login", new object[] {
                 UserName,
                 Password,
                 Category});
  return ((string)(results[0]));
 }
   
 /// <remarks/>
 public System.IAsyncResult BeginLogin(string UserName, string Password, string Category, System.AsyncCallback callback, object asyncState)
 {
  return this.BeginInvoke("Login", new object[] {
                UserName,
                Password,
                Category}, callback, asyncState);
 }
   
 /// <remarks/>
 public string EndLogin(System.IAsyncResult asyncResult)
 {
  object[] results = this.EndInvoke(asyncResult);
  return ((string)(results[0]));
 }
   
 /// <remarks/>
 [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/CheckPower", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
 public string CheckPower(string UserName, string Password, string Category, string Power)
 {
  object[] results = this.Invoke("CheckPower", new object[] {
                   UserName,
                   Password,
                   Category,
                   Power});
  return ((string)(results[0]));
 }
   
 /// <remarks/>
 public System.IAsyncResult BeginCheckPower(string UserName, string Password, string Category, string Power, System.AsyncCallback callback, object asyncState)
 {
  return this.BeginInvoke("CheckPower", new object[] {
                  UserName,
                  Password,
                  Category,
                  Power}, callback, asyncState);
 }
   
 /// <remarks/>
 public string EndCheckPower(System.IAsyncResult asyncResult)
 {
  object[] results = this.EndInvoke(asyncResult);
  return ((string)(results[0]));
 }
}

相关文章推荐

通俗易懂权限管理模块设计-Java

实用springmvc + hibernate + bootstrap 写的一个 Java 后台 权限管理模块

用户权限管理 设计模式

--以前刚入门时候对用户管理这块耗费不少时间,在网上找到的,分享下,给那些需要的人。 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以...
  • SEN03
  • SEN03
  • 2015年09月15日 13:12
  • 1819

企业项目权限管理设计思路详解

任何系统都离不开权限的管理,有一个好的权限管理模块,不仅使我们的系统操作自如,管理方便,也为系统添加亮点。   l        不同职责的人员,对于系统操作的权限应该是不同的。优秀的业务系统,这...
  • sufei58
  • sufei58
  • 2015年09月05日 11:18
  • 3210

系统权限管理设计

关于权限菜单的设计
  • chexlong
  • chexlong
  • 2014年07月11日 16:39
  • 133172

Android 从应用程序跳到系统应用管理和应用的权限管理页面

今天给app添加权限,当用户禁止后会弹出alert提示用户,咱们这个app需要这个权限 没这个权限app的一些功能就不能使了,但用户已经关了 也不知道在哪打开 所以加个去设置的按钮 点击然后跳到系统应...

RBAC权限设计模式

今天看到一个比较清晰的RBAC设计模式的ER图,留下来备用。

权限管理系统数据库设计的简单构思

最近在工作中接触到权限管理的设计,于是,自己在网上查阅了部分资料,再加上自己的一些思考,构思了一个简单的权限管理系统的数据库设计。RABC与Tag说到权限管理,一般都会想到基于角色的访问控制(Role...

CRM系统操作权限的实现

CRM系统操作权限的实现 操作权限功能:      (一)粗粒度权限控制:(即防止用户没有登录手动输入地址)      (二)细粒度权限控制:(即防止没有权限的操作)                1...

C#项目-超市进销存销售管理系统

  • 2011年06月13日 11:41
  • 4.49MB
  • 下载

Java图书管理系统-项目编写

系统功能概述 根据图书管理系统特点,可以将本系统分为4大功能模块,分别为 基础数据维护、图书借阅管理、新书订购管理、系统维护。本系统各个部分包括的具体功能模块如下图所示:...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式的项目----权限管理系统
举报原因:
原因补充:

(最多只允许输入30个字)