UserHelper.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  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. public static bool CheckFuncPower(SqlCommand cmd, int empid, int funcid)
  122. {
  123. if (empid == 0)
  124. {
  125. return true;
  126. }
  127. var user = new u_user_jlhprice() { empid = empid };
  128. if (DbSqlHelper.SelectOne(cmd, user, "empid,rightstring") != 1)
  129. {
  130. throw new Exception(string.Format("查询用户信息失败,empid:{0}", empid));
  131. }
  132. return HasPower(funcid, user.rightstring);
  133. }
  134. private static bool HasPower(int funcid, string sys_pwrstr)
  135. {
  136. bool hasPower;
  137. hasPower = funcid > 0 && sys_pwrstr.Length >= funcid &&
  138. sys_pwrstr.Substring(funcid - 1, 1) == "1";
  139. return hasPower;
  140. }
  141. private static Dictionary<int, sys_func_pwr> _funcCache = new Dictionary<int, sys_func_pwr>();
  142. class sys_func_pwr
  143. {
  144. public int funcid { get; set; }
  145. public byte functype { get; set; }
  146. public int parentid { get; set; }
  147. }
  148. private static void LoadFuncCache(SqlCommand cmd)
  149. {
  150. if (_funcCache.Count == 0)
  151. {
  152. lock (_funcCache)
  153. {
  154. if (_funcCache.Count == 0)
  155. {
  156. cmd.CommandText = "SELECT funcid,functype,parentid FROM sys_func_pwr";
  157. cmd.Parameters.Clear();
  158. using (var reader = cmd.ExecuteReader())
  159. {
  160. while (reader.Read())
  161. {
  162. var func = new sys_func_pwr
  163. {
  164. funcid = Convert.ToInt32(reader["funcid"]),
  165. functype = Convert.ToByte(reader["functype"]),
  166. parentid = Convert.ToInt32(reader["parentid"]),
  167. };
  168. _funcCache[func.funcid] = func;
  169. }
  170. }
  171. }
  172. }
  173. }
  174. }
  175. /// <summary>
  176. /// 过滤出当前用户有的权限列表
  177. /// </summary>
  178. /// <param name="empid">当前用户empid</param>
  179. /// <returns></returns>
  180. public static List<int> FilterMyFunids(SqlCommand cmd, int empid)
  181. {
  182. LoadFuncCache(cmd);
  183. var rslt = new HashSet<int>();
  184. var user = new u_user_jlhprice() { empid = empid};
  185. if (DbSqlHelper.SelectOne(cmd, user, "empid,rightstring") != 1)
  186. {
  187. throw new Exception(string.Format("查询用户信息失败,empid:{0}", empid));
  188. }
  189. foreach (var funcItem in _funcCache)
  190. {
  191. var hasPower = empid == 0 || HasPower(funcItem.Value.funcid, user.rightstring);
  192. if (hasPower && !rslt.Contains(funcItem.Value.funcid))
  193. {
  194. rslt.Add(funcItem.Value.funcid);
  195. }
  196. }
  197. return rslt.ToList();
  198. }
  199. public static List<int> getPowerDept(SqlCommand cmd, int empid)
  200. {
  201. List<int> rslt = new List<int>();
  202. var powerstr = "-1";
  203. string userid;
  204. cmd.CommandText = @"SELECT deptstr,userid FROM u_user_jlhprice WHERE Empid=@empid";
  205. cmd.Parameters.Clear();
  206. cmd.Parameters.AddWithValue("@empid", empid);
  207. using (var reader = cmd.ExecuteReader())
  208. {
  209. if (reader.Read())
  210. {
  211. powerstr = reader["deptstr"].ToString().Trim();
  212. userid = reader["userid"].ToString().Trim();
  213. if (userid.ToLower() == "super")
  214. {
  215. powerstr = "0";
  216. }
  217. }
  218. }
  219. if (string.IsNullOrEmpty(powerstr) || powerstr.Equals("-1"))
  220. {
  221. return rslt;
  222. }
  223. cmd.CommandText = "select deptid from u_dept";
  224. if (powerstr != "0")
  225. {
  226. cmd.CommandText += string.Format(" WHERE deptid IN ({0})", powerstr.Trim(','));
  227. }
  228. cmd.Parameters.Clear();
  229. using (var reader = cmd.ExecuteReader())
  230. {
  231. while (reader.Read())
  232. {
  233. rslt.Add(Convert.ToInt32(reader["deptid"]));
  234. }
  235. }
  236. return rslt;
  237. }
  238. public static List<string> getPowerOutRep(SqlCommand cmd, int empid)
  239. {
  240. List<string> rslt = new List<string>();
  241. var powerstr = "-1";
  242. string userid;
  243. cmd.CommandText = @"SELECT outrepstr,userid FROM u_user_jlhprice WHERE Empid=@empid";
  244. cmd.Parameters.Clear();
  245. cmd.Parameters.AddWithValue("@empid", empid);
  246. using (var reader = cmd.ExecuteReader())
  247. {
  248. if (reader.Read())
  249. {
  250. powerstr = reader["outrepstr"].ToString().Trim();
  251. userid = reader["userid"].ToString().Trim();
  252. if (userid.ToLower() == "super")
  253. {
  254. powerstr = "0";
  255. }
  256. }
  257. }
  258. cmd.CommandText = "select username from u_user_jlhprice";
  259. if (powerstr != "0")
  260. {
  261. cmd.CommandText += string.Format(" WHERE username IN ({0})", powerstr.Trim(','));
  262. }
  263. cmd.Parameters.Clear();
  264. using (var reader = cmd.ExecuteReader())
  265. {
  266. while (reader.Read())
  267. {
  268. rslt.Add(Convert.ToString(reader["username"]).Trim());
  269. }
  270. }
  271. return rslt;
  272. }
  273. }
  274. }