CSFrameworkV6 - 软件用户数授权 - 通过控制在线用户数实现逻辑
一、前言
本文讲解CSFrameworkV6旗舰版在线用户数限制逻辑实现,采用直连模式(ADO-Direct),在DAL层调用相关方法。
WebApi服务端采用其他方式实现,本文不作介绍。
二、系统主要业务功能限制
用户操作主要业务表单时,如进行【保存】、【查询】等操作,系统自动检查在线用户,若在线用户超出软件许可的用户数,系统会终止操作,使当前操作无效。
需要限制的主要功能有:
业务单据:销售单、生产单、送货单、采购单、入库单、出库单等。
基础资料:客户资料、供应商资料等。
三、业务单据DAL层调用接口
以下是【销售订单】DAL层需要检查在线用户数限制、添加接口访问日志的方法:
Update方法
保存数据需要检查在线用户数限制,并且添加接口访问日志
Query方法
查询接口,添加接口访问日志
GetDataByKey方法
获取一张业务单据。
四、基础资料DAL层调用接口
以下是【客户管理】DAL层需要检查在线用户数限制、添加接口访问日志的方法:
Update 方法
GetDataByKey方法
获取一条基础资料。
五、系统修改部分
在系统数据库添加接口访问日志表 (sys_UserAccessLog)
在系统数据库添加软件用户许可配置表 (sys_LicenseConfig)
dalBase 添加 3个基类方法
六、初始化软件用户配置表
系统数据库增加2张表,并初始化数据。
sys_LicenseConfig 表结构
CREATE TABLE [dbo].[sys_LicenseConfig](
[isid] [varchar](50) NOT NULL,
[ParamType] [varchar](20) NOT NULL,
[ParamCode] [varchar](50) NOT NULL,
[ParamName] [nvarchar](50) NULL,
[ParamValue] [nvarchar](250) NULL,
[Description] [nvarchar](250) NULL,
CONSTRAINT [PK_sys_LicenseConfig] PRIMARY KEY CLUSTERED
(
[isid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
初始化数据:
DELETE FROM sys_LicenseConfig;
INSERT INTO sys_LicenseConfig([isid],[ParamType],[ParamCode],[ParamName],[ParamValue],[Description])
VALUES ('100001','System','LicenseNumber','在线用户许可数量',1,'在线用户许可数量,账号+MACD作为判断依据');
INSERT INTO sys_LicenseConfig([isid],[ParamType],[ParamCode],[ParamName],[ParamValue],[Description])
VALUES ('100002','System','HoursRangeActiveUsers','小时数,判断活跃用户',4,'如:4小时内有操作记录的用户为有效在线用户');
INSERT INTO sys_LicenseConfig([isid],[ParamType],[ParamCode],[ParamName],[ParamValue],[Description])
VALUES ('100003','System','HoursRangeLeave','小时数,判断闲置用户',1,'如:1小时内没有操作的用户视为闲置用户');
sys_UserAccessLog 表结构
CREATE TABLE [dbo].[sys_UserAccessLog](
[isid] [varchar](50) NOT NULL,
[UID] [varchar](50) NULL,
[AccessTime] [datetime] NULL,
[MethodName] [varchar](50) NULL,
[MACD] [varchar](50) NULL,
[AccessType] [varchar](20) NULL,
CONSTRAINT [PK_sys_UserAccessLog] PRIMARY KEY CLUSTERED
(
[isid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
七、程序修改部分
用户登录 dalUser.Login
添加接口访问日志。
用户登出 dalUser.Logout
用户登出系统要更新用户在线状态。
逻辑:根据相同的登录账号不同的MAC地址,查询 sys_LogLogin 表最后一条记录,判断类型:
LoginType=I, 表示登录,LoginType=O 表示登出。
当用户所有MAC地址 LoginType = O 的时候,将用户设置为登出状态 FlagOnline=N
只要一个MAC地址是登录状态,将用户设置为在线状态 FlagOnline=Y
在线用户管理&查询 dalUser.GetOnlineUserList
在线用户定义:
1、一个登录账号一人或多人使用(不同的电脑登录)
2、账号+MAC地址表示一个在线用户
八、在线用户管理
该功能包含查询在线用户、强制用户下线。
查询
查询用户表,关联登录日志表。
设置下线
强制执行用户登出系统。
本文讲解了通过在线用户数控制软件授权,实现逻辑比较简单,C/S框架提供专业的软件授权注册系统,
详情:软件用户注册模式 - Auth - 软件授权注册系统V2.1-开发框架文库 (cscode.net)