UserHelper.cs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Data.SqlClient;
  5. using System.Diagnostics;
  6. using JLHHJSvr.Com.Model;
  7. using JLHHJSvr.DBA.DBModle;
  8. using LJLib.DAL.SQL;
  9. using LJLib.Tools.DEncrypt;
  10. using JLHHJSvr.LJException;
  11. using System.Linq;
  12. namespace JLHHJSvr.BLL
  13. {
  14. internal sealed class UserHelper
  15. {
  16. private static Dictionary<string, TokenData> _tokens = new Dictionary<string, TokenData>();
  17. ///// <summary>
  18. ///// TODO: 保存Token信息, 登录成功后绑定token与tokendata
  19. ///// </summary>
  20. ///// <param name="token"></param>
  21. ///// <param name="tokendata"></param>
  22. //public static void SetToken(string token, TokenData tokendata)
  23. //{
  24. // _tokens[token] = tokendata;
  25. //}
  26. ///// <summary>
  27. ///// TODO: 带token请求是通过本方法获取tokendata
  28. ///// </summary>
  29. ///// <param name="token"></param>
  30. ///// <returns>tokendata</returns>
  31. //public static TokenData GetToken(string token)
  32. //{
  33. // if (_tokens.ContainsKey(token))
  34. // {
  35. // return _tokens[token];
  36. // }
  37. // else
  38. // {
  39. // return null;
  40. // }
  41. //}
  42. ///// <summary>
  43. ///// TODO: 获取ID
  44. ///// </summary>
  45. ///// <param name="cmd">数据库连接,事务</param>
  46. ///// <param name="key">关联字</param>
  47. ///// <param name="step">增幅,默认1</param>
  48. ///// <returns>新ID上限</returns>
  49. //public static int GetID(SqlCommand cmd, string key, int step = 1)
  50. //{
  51. // int rslt = 0;
  52. // cmd.CommandText = "UPDATE cd_idfactory SET idvalue = idvalue + @step, @curid = idvalue + @step WHERE idkey = @idkey";
  53. // cmd.Parameters.Clear();
  54. // cmd.Parameters.Add("@idkey", SqlDbType.VarChar).Value = key;
  55. // cmd.Parameters.Add("@step", SqlDbType.Int).Value = step;
  56. // cmd.Parameters.Add("@curid", SqlDbType.Int).Direction = ParameterDirection.Output;
  57. // int nrows = cmd.ExecuteNonQuery();
  58. // if (nrows == 0)
  59. // {
  60. // rslt = 10 + step;
  61. // cmd.CommandText = "INSERT INTO cd_idfactory(idkey, idvalue) VALUES(@idkey, @curid)";
  62. // cmd.Parameters.Clear();
  63. // cmd.Parameters.Add("@idkey", SqlDbType.VarChar).Value = key;
  64. // cmd.Parameters.Add("@curid", SqlDbType.Int).Value = rslt;
  65. // cmd.ExecuteNonQuery();
  66. // }
  67. // else
  68. // {
  69. // rslt = Convert.ToInt32(cmd.Parameters["@curid"].Value);
  70. // }
  71. // return rslt;
  72. //}
  73. ///// <summary>
  74. ///// 初始化超级用户
  75. ///// </summary>
  76. ///// <param name="constr">数居库连接字符串</param>
  77. //public static void InitUser(string constr)
  78. //{
  79. // using (var con = new SqlConnection(constr))
  80. // using (var cmd = con.CreateCommand())
  81. // {
  82. // con.Open();
  83. // using (cmd.Transaction = con.BeginTransaction())
  84. // {
  85. // try
  86. // {
  87. // var user = new st_user {userid = 11};
  88. // if (DbSqlHelper.SelectOne(cmd, user, "usercode") != 1)
  89. // {
  90. // var id = GetID(cmd, "st_user");
  91. // user.userid = id;
  92. // user.usercode = "super";
  93. // user.username = "超级用户";
  94. // user.psw = DESEncrypt.Encrypt("super", "BC493812B6664BECBF44C21C3BB043C4");
  95. // user.sex = "男";
  96. // user.tel = string.Empty;
  97. // user.dscrp = string.Empty;
  98. // user.opemp = "初始化生成";
  99. // user.opdate = DateTime.Now;
  100. // user.modemp = "初始化生成";
  101. // user.moddate = DateTime.Now;
  102. // DbSqlHelper.InsertOrUpdate(cmd, user, "userid,usercode,username,psw,sex,tel,dscrp,opemp,opdate,modemp,moddate");
  103. // var powers = new Power().GetAllPowers();
  104. // var userPower = new st_user_power { userid = user.userid };
  105. // foreach (var power in powers)
  106. // {
  107. // userPower.funid = power.funid;
  108. // DbSqlHelper.Insert(cmd, userPower, "userid, funid");
  109. // }
  110. // }
  111. // cmd.Transaction.Commit();
  112. // }
  113. // catch (Exception e)
  114. // {
  115. // cmd.Transaction.Rollback();
  116. // Trace.Write("初始化super用户数据失败:"+e.ToString());
  117. // }
  118. // }
  119. // }
  120. //}
  121. private static bool HasPower(int funcid, string sys_pwrstr)
  122. {
  123. bool hasPower;
  124. hasPower = funcid > 0 && sys_pwrstr.Length >= funcid &&
  125. sys_pwrstr.Substring(funcid - 1, 1) == "1";
  126. return hasPower;
  127. }
  128. private static Dictionary<int, sys_func_pwr> _funcCache = new Dictionary<int, sys_func_pwr>();
  129. class sys_func_pwr
  130. {
  131. public int funcid { get; set; }
  132. public byte functype { get; set; }
  133. public int parentid { get; set; }
  134. }
  135. private static void LoadFuncCache(SqlCommand cmd)
  136. {
  137. if (_funcCache.Count == 0)
  138. {
  139. lock (_funcCache)
  140. {
  141. if (_funcCache.Count == 0)
  142. {
  143. cmd.CommandText = "SELECT funcid,functype,parentid FROM sys_func_pwr";
  144. cmd.Parameters.Clear();
  145. using (var reader = cmd.ExecuteReader())
  146. {
  147. while (reader.Read())
  148. {
  149. var func = new sys_func_pwr
  150. {
  151. funcid = Convert.ToInt32(reader["funcid"]),
  152. functype = Convert.ToByte(reader["functype"]),
  153. parentid = Convert.ToInt32(reader["parentid"]),
  154. };
  155. _funcCache[func.funcid] = func;
  156. }
  157. }
  158. }
  159. }
  160. }
  161. }
  162. /// <summary>
  163. /// 过滤出当前用户有的权限列表
  164. /// </summary>
  165. /// <param name="empid">当前用户empid</param>
  166. /// <returns></returns>
  167. public static List<int> FilterMyFunids(SqlCommand cmd, int empid)
  168. {
  169. LoadFuncCache(cmd);
  170. var rslt = new HashSet<int>();
  171. var user = new u_user_jlhprice() { empid = empid};
  172. if (DbSqlHelper.SelectOne(cmd, user, "empid,rightstring") != 1)
  173. {
  174. throw new Exception(string.Format("查询用户信息失败,empid:{0}", empid));
  175. }
  176. foreach (var funcItem in _funcCache)
  177. {
  178. var hasPower = empid == 0 || HasPower(funcItem.Value.funcid, user.rightstring);
  179. if (hasPower && !rslt.Contains(funcItem.Value.funcid))
  180. {
  181. rslt.Add(funcItem.Value.funcid);
  182. }
  183. }
  184. return rslt.ToList();
  185. }
  186. }
  187. }