Example #1
0
        /// <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));
        }
Example #2
0
        /// <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));
        }
Example #3
0
        /// <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 = "允许用户访问该地址。"
                });
            }
        }
Example #4
0
        /// <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;
        }
Example #5
0
        /// <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);
        }
Example #6
0
        /// <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);
            }
        }
Example #7
0
    protected void Page_Load(object sender, EventArgs e)
    {
        IUserBLL UserBLL = (IUserBLL)BLLAccess.CreateInterFace(BLLAccessEnum.BLLName.UserBLL);

        Page.Response.Write(UserBLL.Login("", ""));
    }