📄 userlogin.cs
字号:
//======================================================
//== (c)2008 aspxcms inc by NeTCMS v1.0 ==
//== Forum:bbs.aspxcms.com ==
//== Website:www.aspxcms.com ==
//======================================================
using System;
using System.Text;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using System.Text.RegularExpressions;
using NetCMS.DALFactory;
using NetCMS.Model;
using NetCMS.DALProfile;
using NetCMS.Config;
using NetCMS.Common;
namespace NetCMS.DALSQLServer
{
public class UserLogin : DbBase, IUserLogin
{
protected struct AdminDataInfo
{
public byte isSuper;
public string adminGroupNumber;
public int ID;
public byte isChannel;
}
protected struct UserLoginSucceedInfo
{
public string UserNum;
public string IP;
public int IPoint;
public int GPoint;
public int CPoint;
public int APoint;
}
private static readonly string SQL_SYS = "select islock,EmailATF,isMobile,isIDcard,UserGroupNumber from " + DBConfig.TableNamePrefix + "sys_User where UserNum=@UserNum";
private static readonly string SQL_PRAM = "select top 1 IPLimt,returnemail,returnmobile,LoginLock,cPointParam,aPointparam from " + DBConfig.TableNamePrefix + "sys_PramUser";
private static readonly string SQL_ADMIN = "select Iplimited,isLock,isSuper,adminGroupNumber,[ID],[isChannel] from " + DBConfig.TableNamePrefix + "sys_admin where UserNum=@UserNum";
private static readonly string SQL_USERGROUP = "select IsCert,LoginPoint,Rtime from " + DBConfig.TableNamePrefix + "user_Group where GroupNumber=@GroupNumber";
private static readonly string SQL_DEFUSERGROUP = "select top 1 a.IsCert,a.LoginPoint,a.Rtime from " + DBConfig.TableNamePrefix + "user_Group a inner join " + DBConfig.TableNamePrefix + "sys_PramUser b on a.GroupNumber=b.RegGroupNumber";
EnumLoginState IUserLogin.CheckUserLogin(string UserNum, bool IsCert)
{
SqlConnection cn = new SqlConnection(DBConfig.CmsConString);
try
{
cn.Open();
return CheckUserLogin(cn, UserNum, IsCert);
}
catch
{
return EnumLoginState.Err_DbException;
}
finally
{
if (cn.State == ConnectionState.Open)
cn.Close();
}
}
protected EnumLoginState CheckUserLogin(SqlConnection cn, string UserNum, bool IsCert)
{
#region 局部变量
string LimitedIP = string.Empty;
bool bisLock = true;
bool bEmailATF = false;
bool bisMobile = false;
string sUserGroupNumber = string.Empty;
bool bisIDcard = false;
#endregion 局部变量
bool flag = true;
IDataReader rd = this.GetSysUser(cn, UserNum);
if (rd.Read())
{
#region 取值
if (!rd.IsDBNull(0) && rd.GetByte(0) == 0X0)
bisLock = false;
if (!rd.IsDBNull(1) && rd.GetByte(1) != 0X0)
bEmailATF = true;
if (!rd.IsDBNull(2) && rd.GetByte(2) != 0X0)
bisMobile = true;
if (!rd.IsDBNull(3) && rd.GetByte(3) != 0X0)
bisIDcard = true;
if (!rd.IsDBNull(4))
sUserGroupNumber = rd.GetString(4);
flag = false;
#endregion 取值
}
rd.Close();
if (flag)
return EnumLoginState.Err_UserNumInexistent;
if (bisLock)
return EnumLoginState.Err_Locked;
if (LimitedIP.Trim() != string.Empty && !Public.ValidateIP(LimitedIP))
return EnumLoginState.Err_IPLimited;
bool bReturnEmail = false;
bool bReturnMobile = false;
rd = GetParamUser(cn);
if (rd.Read())
{
if (!rd.IsDBNull(0))
LimitedIP = rd.GetString(0);
if (!rd.IsDBNull(1) && rd.GetByte(1) != 0X00)
bReturnEmail = true;
if (!rd.IsDBNull(2) && rd.GetByte(2) != 0X00)
bReturnMobile = true;
}
rd.Close();
if (bReturnEmail && !bEmailATF)
return EnumLoginState.Err_UnEmail;
if (bReturnMobile && !bisMobile)
return EnumLoginState.Err_UnMobile;
if (IsCert)
{
rd = GetUserGroupInfo(cn, sUserGroupNumber);
if (rd.Read())
{
if (!bisIDcard && rd["IsCert"] != DBNull.Value && Convert.ToInt32(rd["IsCert"]) != 0X00)
{
rd.Close();
return EnumLoginState.Err_UnCert;
}
}
rd.Close();
return EnumLoginState.Succeed;
}
else
{
return EnumLoginState.Succeed;
}
}
protected EnumLoginState CheckAdminLogin(SqlConnection cn, string UserNum, out AdminDataInfo info)
{
info.adminGroupNumber = string.Empty;
info.ID = 0;
info.isChannel = 0;
info.isSuper = 0;
string LimitedIP = string.Empty;
bool bisLock = true;
bool flag = true;
IDataReader rd = GetSysUser(cn, UserNum);
if (rd.Read())
{
if (!rd.IsDBNull(0) && rd.GetByte(0) == 0X0)
bisLock = false;
flag = false;
}
rd.Close();
if (flag)
return EnumLoginState.Err_UserNumInexistent;
if (bisLock)
return EnumLoginState.Err_Locked;
flag = true;
bisLock = true;
rd = DbHelper.ExecuteReader(cn, CommandType.Text, SQL_ADMIN, new SqlParameter("@UserNum", UserNum));
if (rd.Read())
{
if (!rd.IsDBNull(0)) LimitedIP = rd.GetString(0);
if (!rd.IsDBNull(1) && rd.GetByte(1) == 0X0)
bisLock = false;
if (!rd.IsDBNull(2))
info.isSuper = rd.GetByte(2);
if (!rd.IsDBNull(3))
info.adminGroupNumber = rd.GetString(3);
info.ID = rd.GetInt32(4);
if (!rd.IsDBNull(5))
info.isChannel = rd.GetByte(5);
flag = false;
}
rd.Close();
if (flag)
return EnumLoginState.Err_AdminNumInexistent;
if (bisLock)
return EnumLoginState.Err_AdminLocked;
if (LimitedIP.Trim() != string.Empty && !Public.ValidateIP(LimitedIP))
return EnumLoginState.Err_IPLimited;
return EnumLoginState.Succeed;
}
EnumLoginState IUserLogin.CheckAdminLogin(string UserNum)
{
SqlConnection cn = new SqlConnection(NetCMS.Config.DBConfig.CmsConString);
try
{
cn.Open();
AdminDataInfo info;
return CheckAdminLogin(cn, UserNum, out info);
}
catch
{
return EnumLoginState.Err_DbException;
}
finally
{
if (cn.State == ConnectionState.Open)
cn.Close();
}
}
protected IDataReader GetParamUser(SqlConnection cn)
{
return DbHelper.ExecuteReader(cn, CommandType.Text, SQL_PRAM, null);
}
protected IDataReader GetSysUser(SqlConnection cn, string UserNum)
{
SqlParameter Param = new SqlParameter("@UserNum", UserNum);
return DbHelper.ExecuteReader(cn, CommandType.Text, SQL_SYS, Param);
}
protected IDataReader GetUserGroupInfo(SqlConnection cn, string GroupNum)
{
SqlParameter Param = new SqlParameter("@GroupNumber", GroupNum);
SqlDataReader rd = (SqlDataReader)DbHelper.ExecuteReader(cn, CommandType.Text, SQL_USERGROUP, Param);
if (!rd.HasRows)
{
rd.Close();
rd = (SqlDataReader)DbHelper.ExecuteReader(cn, CommandType.Text, SQL_DEFUSERGROUP, null);
}
return rd;
}
protected string GetAdminPopList(SqlConnection cn, int id)
{
string Sql = "select PopList from " + Pre + "sys_Admin where [ID]=" + id;
return Convert.ToString(DbHelper.ExecuteScalar(cn, CommandType.Text, Sql, null));
}
protected IDataReader GetAdminGroupList(SqlConnection cn, string GroupNum)
{
string Sql = "select ClassList,SpecialList,channelList from " + Pre + "sys_admingroup where adminGroupNumber=@adminGroupNumber";
SqlParameter Param = new SqlParameter("@adminGroupNumber", GroupNum);
return DbHelper.ExecuteReader(cn, CommandType.Text, Sql, Param);
}
/// <summary>
/// 权限处理
/// </summary>
/// <param name="PopCode">权限代码</param>
/// <param name="ClassID">栏目ID</param>
/// <param name="SpecialID">专题ID</param>
/// <param name="SiteID">频道ID</param>
/// <returns></returns>
EnumLoginState IUserLogin.CheckAdminAuthority(string PopCode, string ClassID, string SpecialID, string SiteID)
{
string UserNum = NetCMS.Global.Current.UserNum;
SqlConnection cn = new SqlConnection(DBConfig.CmsConString);
try
{
cn.Open();
AdminDataInfo info;
EnumLoginState state = CheckAdminLogin(cn, UserNum, out info);
if (state != EnumLoginState.Succeed)
return state;
if (info.isSuper == 0X01)
return EnumLoginState.Succeed;
string PopList = GetAdminPopList(cn, info.ID);
if (PopList.IndexOf(PopCode) < 0)
return EnumLoginState.Err_NoAuthority;
string ClassList = string.Empty;
string SpecialList = string.Empty;
string SiteList = string.Empty;
IDataReader rd = GetAdminGroupList(cn, info.adminGroupNumber);
if (rd.Read())
{
if (!rd.IsDBNull(0))
ClassList = rd.GetString(0);
if (!rd.IsDBNull(1))
SpecialList = rd.GetString(1);
if (!rd.IsDBNull(2))
SiteList = rd.GetString(2);
}
rd.Close();
if (ClassList.IndexOf(ClassID) >= 0 && SpecialList.IndexOf(SpecialID) >= 0 && SiteList.IndexOf(SiteID) >= 0)
return EnumLoginState.Succeed;
else
return EnumLoginState.Err_NoAuthority;
}
catch
{
return EnumLoginState.Err_DbException;
}
finally
{
if (cn.State == ConnectionState.Open)
cn.Close();
}
}
EnumLoginState IUserLogin.PersonLogin(string UserName, string PassWord, out GlobalUserInfo info)
{
info = new GlobalUserInfo(string.Empty, string.Empty, string.Empty);
if (UserName == null || UserName.Trim() == string.Empty || PassWord == null || PassWord.Trim() == string.Empty)
{
return EnumLoginState.Err_UserNameOrPwdError;
}
SqlConnection cn = new SqlConnection(DBConfig.CmsConString);
try
{
string LogIP = NetCMS.Common.Public.getUserIP();
DateTime Now = DateTime.Now;
cn.Open();
#region 基本信息表
string UserNum = string.Empty;
string SiteID = string.Empty;
string PWD = string.Empty;
byte IsLock = 0X01;
int ipnt = 0;
int gpnt = 0;
int cpnt = 0;
int apnt = 0;
string sUserGroup = string.Empty;
DateTime dtUserRegDate = DateTime.Now;
SqlParameter Param = new SqlParameter("@UserName", UserName);
string Sql = "select UserPassword,UserNum,islock,SiteID,UserGroupNumber,RegTime,iPoint,gPoint,cPoint,aPoint from " + Pre + "sys_User where UserName=@UserName";
bool bexist = false;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -