企业数据库管理应用系统实现多种登录方式(策略模式)
应用软件系统内部集成授权登录功能 (Login Window)
任何基于数据库管理应用软件都集成系统登录功能,通常的作法是在登录窗体输入用户名和密码,然后调用业务层的安全管理模块检查用户名和密码,检查通过则允许进入系统程序主界面。
然而,有些企业为了响应用户避免使用系统前必须登录及强制输入用户名及密码,认为这样操作很麻烦,理由是用户在登入Windows操作系统时已经输入域用户和密码了,或者输入了Novell网用户及密码,为了避免再次授权登录用户要求软件集成自动登录功能。
此需求相信大多数人为之不解且纳闷着,理论上操作系统授权和应用系统授权是完全独立的不能一概而论,但是这些生产企业的管理系统不得不考虑集成自动登录方便用户使用,提高生产效率法则至高无上。企业定制软件和市场产品不同,定制软件就是定制特色。
集成域用户和Novell网用户自动登录解决方案

为了兼容自动登录功能涉及修改的地方很多,主要是权限管理相关数据结构,比如用户资料,用户组,角色等,在这里不系统性的讨论了。
在用户表tb_MyUser增加两个字段:
NovellAccount varchar(250)
DomainAccount varchar(250)
NovellAccount:
存储用户对应的Novell用户名,多个用户名用逗号分开。
如:UserA.ABC.COM, UserA.ABC.CN, UserA.ABC.HK
如中国大陆的域为ABC.CN, UserA的用户全名是UserA.ABC.CN,
香港的域为ABC.HK,UserA的用户全名是UserA.ABC.HK等等。
问题:
为什么有多个用户名呢?
因为企业网络是通过VPN技术组建的,按组织结构组建了分布在不同区域的局域网,管理人员或开发实施部门的用户都需要在这些网络内建立用户名。主要是考虑到行政管理及VPN网速不适合跨区域快速存取数据等,这样,一个用户需要在多个网域建立帐号了。
DomainAccount:
记录用户对应的域用户名,多个用户名用逗号分开。
如:UserA@ABC.COM, UserA@ABC.CN, UserA@ABC.HK
这两个字段与Account字段建立了对应关系, tb_MyUser表结构:
---------------------------------------------------------------------------
Account | NovellAccount | DomainAccount
---------------------------------------------------------------------------
UserA | UserA.ABC.COM, UserA.ABC.CN | UserA@ABC.COM, UserA@ABC.CN
.......
通过这个表即可实现Domain与Novell网用户自动登录。
1. 登录前从本地取到当前登录的Novell用户名, 如:UserA.ABC.CN,与NovellAccount字段匹配是否存在。
2. 登录前从本地取到Domain用户名,如:UserA@ABC.CN,与DomainAccount字段匹配是否存在。
本人的电脑已连接Windows域及Novell网, 在实际环境内调试成功,为了考虑没有加入域和Novell网络环境的朋友,在源码内屏蔽了相关API函数。






/// <summary>
/// 登录授权模式
/// </summary>
public interface ILoginAuthorization
{
/// <summary>
/// 登录,验证用户.
/// </summary>
bool Login();
/// <summary>
/// 当前登录策略是否支持登出模式
/// </summary>
bool SupportLogout { get; }
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
/// <summary>
/// 支持登录用户类型
/// </summary>
public enum LoginUserType
{
/// <summary>
/// 系统内部用户
/// </summary>
S, //System Account
/// <summary>
/// Windows域用户
/// </summary>
W, //Windows Domain Account
/// <summary>
/// Novell用户
/// </summary>
N //Novell Account
}
private void btnLogin_Click(object sender, EventArgs e)
{
try
{
this.Cursor = Cursors.WaitCursor;
this.SetButtonEnable(false);
this.Update();//必须
this.ShowLoginInfo("正在验证用户名及密码");
if (_CurrentAuthorization.Login()) //调用登录策略
{
SystemAuthorization.Current = _CurrentAuthorization; //登录成功, 保存当前授权模式
Msg.ShowInformation("登录成功!\r\n\r\n用户:" txtUser.Text "\r\n策略:"
_CurrentAuthorization.ToString() "\r\n\r\n\r\n开始打开主窗体 frmMain ....");
this.DialogResult = DialogResult.OK; //成功
this.Close(); //关闭登陆窗体
}
else
{
throw new Exception("登录失败,请检查用户名和密码!");
}
}
catch (Exception ex)
{
this.SetButtonEnable(true);
this.ShowLoginInfo(ex.Message);
Msg.Warning(ex.Message);
}
this.Cursor = Cursors.Default;
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
.\debug\NovellLdapImp.dll文件,用Delphi封装的Novell LDAP API库。
.\debug\cfg.ini文件, 在第一行指定S,W,N,指定登录策略
N
//S:SYSTEM
//W:DOMAIN
//N:NOVELL
.\Debug\DB\CSFrameworkTestDB.mdf数据库文件
请修改dalUser.cs , 配置连接字符串
private SqlConnection CreateConnection()
{
string db = @"E:\CSFramework.Tech\LoginStrategy\Debug\DB\CSFrameworkTestDB.mdf";
string conn = @"Server=.\SQLEXPRESS;AttachDbFileName="+db+";Integrated Security=True;";
return new SqlConnection(conn);
}
Source Code for VIP:
CS系统三层架构扩展支持WCF及策略模式应用(原创)
开发应用 - 策略模式(Strategy Pattern) 常用设计模式
CSFramework.CodeGeneratorV6.0|代码生成器测试案例|C/S开发框架
CSFramework.DB 功能介绍|C/S开发框架
CSFramework.WebApi支持多种常用数据库(Mssql/MySQL/Oracle)|C/S开发框架
多数据库支持 | MiniFramework | 蝇量级开发框架|C/S开发框架
CSFramework.DB架构图|软件手册
软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲
Winform企业级WCF快速开发框架平台(C/S架构+WCF+DevExpress+SQL多数据库)
原创C/S架构开源软件 - C#.NET+Winform+Dev+SQL快速开发框架
CSFramework.DB基于ADO.NET多数据库底层组件包(MSSQL+Oracle+MySQL)
CSFramework.WebApi框架快速搭建后端服务支持APP、B/S、C/S、微信小程序、公众号、Web客户端
Winform三层架构教程,CS三层结构图及源码实例讲解
微信小程序后端框架 | C# ASP.NET服务端WebApi快速开发框架平台
WebApi快速开发框架,C# ASP.NET后端开发平台
C/S自动升级软件之下载升级包策略设计|C/S框架网
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服

(VIP会员下载)