/// <summary> /// 获取用户组列表 /// </summary> /// <param name="userGroup_GUID">用户组</param> /// <param name="userGroupName">用户组名称</param> /// <returns>用户组列表</returns> public DataSet GetUserGroupList(string userGroup_GUID, string userGroupName) { var access = BLLAccess.GetInstance(); return(access.SelectUserGroupData(userGroup_GUID, userGroupName)); }
/// <summary> /// 保存用户组信息。 /// </summary> /// <param name="userGroup_GUID">用户组GUID。</param> /// <param name="userGroupName">用户组名。</param> /// <param name="type">保存方式add:增加 update:更新</param> /// <returns>用户和用户组信息数据集。</returns> public DataSet SaveUserGroupData(string userGroup_GUID, string userGroupName, string type) { var access = BLLAccess.GetInstance(); return(access.SaveUserGroupData(userGroup_GUID, userGroupName, type)); }
/// <summary> /// 检查账号访问权限。 /// </summary> /// <param name="url">地址。</param> /// <param name="urlCode">地址编码。</param> /// <param name="account">账号。</param> /// <returns>检查结果。</returns> public IPermissionVerifyResult CheckUrl(string url, string urlCode, string account) { var access = BLLAccess.GetInstance(); if (!PermissionArgs.GetInstance().CheckNoConfigurationUrl) { //部分地址在数据库中无配置。如果不需要检查则认为验证成功。 DataSet urlInfo = access.Select_Url_Data(url: url); if (string.IsNullOrEmpty(urlInfo.GetData().ToString())) { return(new PermissionVerifyResultEntity() { PermissionVerifyState = Enum_PermissionVerifyState.该地址验证成功, PermissionVerifyMessage = string.Empty }); } } if (string.IsNullOrEmpty(urlCode)) { return(new PermissionVerifyResultEntity() { PermissionVerifyState = Enum_PermissionVerifyState.地址编码为空, PermissionVerifyMessage = "地址编码为空!" }); } if (string.IsNullOrEmpty(account)) { return(new PermissionVerifyResultEntity() { PermissionVerifyState = Enum_PermissionVerifyState.用户名为空, PermissionVerifyMessage = "用户名为空!" }); } //查询用户的组权限。 IEnumerable <UrlConfigEntity> allowableConfig; IEnumerable <UrlConfigEntity> forbiddenConfig; SeparateGroupUrlConfig(allowableConfig: out allowableConfig, forbiddenConfig: out forbiddenConfig, account: account, url: url, urlCode: urlCode); if (allowableConfig.Count() == 0) { if (forbiddenConfig.Count() > 0) { return(new PermissionVerifyResultEntity() { PermissionVerifyState = Enum_PermissionVerifyState.拒绝访问该地址, PermissionVerifyMessage = "拒绝用户访问该地址!" }); } return(new PermissionVerifyResultEntity() { PermissionVerifyState = Enum_PermissionVerifyState.该地址验证失败, PermissionVerifyMessage = "用户无权限访问该地址!" }); } else { return(new PermissionVerifyResultEntity() { PermissionVerifyState = Enum_PermissionVerifyState.该地址验证成功, PermissionVerifyMessage = "允许用户访问该地址。" }); } }
/// <summary> /// 获取用户组权限配置。 /// </summary> /// <param name="account">用户账号。</param> /// <param name="url">地址。</param> /// <param name="urlCode">地址编码。</param> private void SeparateGroupUrlConfig(out IEnumerable <UrlConfigEntity> allowableConfig, out IEnumerable <UrlConfigEntity> forbiddenConfig, string account = null, string url = null, string urlCode = null) { var access = BLLAccess.GetInstance(); IEnumerable <UrlConfigEntity> groupUrlConfig = new List <UrlConfigEntity>(); if (!string.IsNullOrEmpty(account)) { //如果用户账号不为空,则获取用户所属组。 DataSet userGroupInfo = access.Select_UserGroup_Type_User_Data(account: account); if (userGroupInfo != null && userGroupInfo.Tables.Count > 0 && userGroupInfo.Tables[0].Rows.Count > 0) { var userGroup_GUID = from i in userGroupInfo.Tables[0].AsEnumerable() select i["UserGroup_GUID"].ToString(); foreach (var i in userGroup_GUID) { var groupUrlConfigSet = access.Select_Url_Data_UserGroup_Type(userGroup_GUID: i, url: url, urlCode: urlCode); var groupUrlConfigEntityList = from j in groupUrlConfigSet.Tables[0].AsEnumerable() select new UrlConfigEntity() { GUID = j["Url_GUID"].ToString(), ParentGUID = j["ParentGUID"].ToString(), Url = j["Url"].ToString(), UrlCode = j["UrlCode"].ToString(), UrlName = j["UrlName"].ToString(), UrlParams = j["UrlParams"].ToString(), UrlIndex = j["UrlIndex"].ToString().ToInt(), Forbidden = j["Forbidden"].ToString().ToBool(), PriorityLevel = j["PriorityLevel"].ToString().ToInt() }; //将该组的权限配置与其他组连接在一起。 groupUrlConfig = groupUrlConfig.Union(groupUrlConfigEntityList); } } } //筛选其中拒绝访问的权限配置。 var forbiddenUrlConfig = from i in groupUrlConfig where i.Forbidden select i; groupUrlConfig = groupUrlConfig.Where((i) => { //剔除禁止访问的权限配置。 if (i.Forbidden) { return(false); } //剔除允许访问的优先级较小的权限配置。 var f = from j in forbiddenUrlConfig where i.GUID.Equals(j.GUID) && i.PriorityLevel <= j.PriorityLevel select j; if (f.Count() > 0) { return(false); } return(true); }); //将各组权限配置合并。 groupUrlConfig = groupUrlConfig.Distinct(new UrlConfigEntityComparer()); allowableConfig = groupUrlConfig; forbiddenConfig = forbiddenUrlConfig; }
/// <summary> /// 将用户强制下线。 /// </summary> /// <param name="account">账号。</param> /// <param name="clientPassword">密码。</param> public void SetOffline(string account, string clientPassword = null) { var access = BLLAccess.GetInstance(); access.Update_Login_Log_Offline(account: account, clientPassword: clientPassword, offlineFlag: true); }
/// <summary> /// 检查用户凭证。 /// </summary> /// <param name="account">账号。不可空。</param> /// <param name="password">密码。可空。不可与客户端密码、客户端标记同时为空。</param> /// <param name="clientFlag">客户端标记。可空。不可与密码同时为空。</param> /// <param name="clientPassword">客户端密码。可空。不可与密码同时为空。</param> /// <returns>登陆状态。</returns> public IPermissionVerifyResult CheckUserCertificate(string account, string password, string clientFlag, ref string clientPassword) { var access = BLLAccess.GetInstance(); if (string.IsNullOrEmpty(account)) { return(new PermissionVerifyResultEntity() { PermissionVerifyState = Enum_PermissionVerifyState.用户名为空, PermissionVerifyMessage = "用户名为空!" }); } if (string.IsNullOrEmpty(clientFlag)) { return(new PermissionVerifyResultEntity() { PermissionVerifyState = Enum_PermissionVerifyState.客户端标记为空, PermissionVerifyMessage = "客户端标记为空!" }); } //验证用户账号、密码的合法性。 var ul = UserLogin(account, password); if (ul.PermissionVerifyState == Enum_PermissionVerifyState.密码为空) { //密码为空的情况下验证输入的客户端信息。 //验证账号在线数量。 var co = CheckOnlineCount(account); if (co.PermissionVerifyState == Enum_PermissionVerifyState.用户登陆过多 && !string.IsNullOrEmpty(clientPassword)) { SetOffline(account, clientPassword); } //检查客户端凭据是否合法。 var cucc = CheckUserClientCertificate(account, clientPassword, clientFlag); if (cucc.PermissionVerifyState == Enum_PermissionVerifyState.客户端密码验证通过) { access.Update_Login_Log_DateTimeUpdate(clientPassword); return(new PermissionVerifyResultEntity() { PermissionVerifyState = Enum_PermissionVerifyState.用户验证通过, PermissionVerifyMessage = "客户端请求合法,用户验证通过,自动登录!" }); } else { return(cucc); } } else if (ul.PermissionVerifyState == Enum_PermissionVerifyState.密码验证通过) { //在密码验证通过之后,要检查用户在线数量。 var co = CheckOnlineCount(account); if (co.PermissionVerifyState == Enum_PermissionVerifyState.允许用户继续登录) { clientPassword = access.Insert_Login_Log(account, clientFlag).GetData("ClientPassword").ToString(); return(new PermissionVerifyResultEntity() { PermissionVerifyState = Enum_PermissionVerifyState.用户验证通过, PermissionVerifyMessage = "用户验证通过!" }); } if (co.PermissionVerifyState == Enum_PermissionVerifyState.用户已达到限制登录数量) { //如果在线数量达到了限制,验证输入的客户端信息。 var cucc = CheckUserClientCertificate(account, clientPassword, clientFlag); if (cucc.PermissionVerifyState == Enum_PermissionVerifyState.客户端密码验证通过) { return(new PermissionVerifyResultEntity() { PermissionVerifyState = Enum_PermissionVerifyState.用户验证通过, PermissionVerifyMessage = "客户端密码验证通过,用户自动登录!" }); } //如果输入的客户端信息不合法,尝试使保护期外的一个在线信息强制下线 DateTime onlineDateTime = PermissionArgs.GetInstance().OnlineDateTime; DateTime guardDateTime = PermissionArgs.GetInstance().GuardDateTime; //尝试强制下线1个连接。 var info = access.Update_Login_Log_Offline(account: account, count: 1, offline: 0, dateTimeUpdate_Start: onlineDateTime, dateTimeUpdate_End: guardDateTime, offlineFlag: true); if (info.GetData("Count").ToString().ToInt() == 1) { //如果强制下线成功,则登录现有连接。 clientPassword = access.Insert_Login_Log(account, clientFlag).GetData("ClientPassword").ToString(); return(new PermissionVerifyResultEntity() { PermissionVerifyState = Enum_PermissionVerifyState.用户验证通过, PermissionVerifyMessage = "强制下线其他连接,用户验证通过并登录!" }); } else { if (PermissionArgs.GetInstance().OnlineCount == 1) { //如果没有将任何连接强制下线,则提示登录错误信息。 return(new PermissionVerifyResultEntity() { PermissionVerifyState = Enum_PermissionVerifyState.用户已达到限制登录数量, PermissionVerifyMessage = "该用户已经登录,在保护期范围内不允许强制使其下线!" }); } else { //如果没有将任何连接强制下线,则提示登录错误信息。 return(new PermissionVerifyResultEntity() { PermissionVerifyState = Enum_PermissionVerifyState.用户处于登录保护期, PermissionVerifyMessage = "用户已达到限制登录数量,并且所有连接都处于登录保护期!" }); } } } if (co.PermissionVerifyState == Enum_PermissionVerifyState.用户登陆过多 && !string.IsNullOrEmpty(clientPassword)) { SetOffline(account, clientPassword); } return(co); } else { return(ul); } }
protected void Page_Load(object sender, EventArgs e) { IUserBLL UserBLL = (IUserBLL)BLLAccess.CreateInterFace(BLLAccessEnum.BLLName.UserBLL); Page.Response.Write(UserBLL.Login("", "")); }