PurviewManager.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587
  1. using System;
  2. using System.Collections;
  3. using System.Xml;
  4. using System.Data;
  5. using System.IO;
  6. using System.Data.OracleClient;
  7. using Core.Mes.IBaseInterface;
  8. using Core.Mes.ServerFrameWork;
  9. namespace Core.Mes.PurviewManager
  10. {
  11. /// <summary>
  12. /// 权限管理服务端,用于在客户端输入用户名密码后
  13. /// 由服务端来获取对应权限文件,然后根据权限文件
  14. /// 将相应的窗体信息从数据库中读出,再将信息合并
  15. /// 到权限文件中,然后将权限文件返回给客户端生成
  16. /// 菜单文件
  17. ///
  18. /// fanxb 20050705
  19. /// </summary>
  20. public class PurviewManager : IComponent
  21. {
  22. #region " variable "
  23. private UAM_DEPARTMENT _departmentClass;
  24. private UAM_ROLE _roleClass;
  25. private UAM_FUNCTION _functionClass;
  26. private UAM_USER _userClass;
  27. private UAM_AUTHORIZATION _authorClass;
  28. #endregion
  29. #region " Construct "
  30. public PurviewManager() { }
  31. #endregion
  32. #region " 获取权限信息 "
  33. /// <summary>
  34. /// 获取权限信息
  35. /// </summary>
  36. /// <param name="userID">用户名ID</param>
  37. /// <param name="passwd">密码</param>
  38. /// <returns>权限xml文件的字符串</returns>
  39. public ReturnObject GetPurviewInfo(string userID, string passwd)
  40. {
  41. lock (this)
  42. {
  43. string err = "";
  44. DataRow dr = GetPurviewRow(userID, passwd, out err);
  45. if (err != "")
  46. {
  47. return new ReturnObject(null, err);
  48. }
  49. if (dr == null || dr["MEMO"] == null)
  50. return new ReturnObject(null, 10009, "用户名或密码错误!");
  51. string fileName = dr["MEMO"].ToString().Trim();
  52. if (File.Exists(@"CA\" + fileName))
  53. {
  54. XmlDocument doc = ReadXmlDoc(fileName);
  55. if (doc != null)
  56. {
  57. UserInfo useInfo;
  58. try
  59. {
  60. useInfo = SetUserInfo(dr);
  61. SetValidateInfo(useInfo);
  62. //useInfo.MenuConfigInfo = doc.InnerXml;
  63. }
  64. catch (Exception ex)
  65. {
  66. return new ReturnObject(null, ex.Message);
  67. }
  68. return new ReturnObject(useInfo);
  69. }
  70. else
  71. return new ReturnObject(null, 10010, "权限文件内容错误!!");
  72. }
  73. else
  74. {
  75. return new ReturnObject(null, 10006, "未找到指定的文件!");
  76. }
  77. }
  78. }
  79. private DataRow GetPurviewRow(string userID, string passwd, out string err)
  80. {
  81. string sqlstr = "SELECT * FROM UAMV_AUTHORROLE WHERE LOGINID = '" + userID + "' AND PASSWORD = '" + PasswdSecurity(passwd) + "'";
  82. err = "";
  83. System.Data.DataSet ds = DBManager.ExecuteQuery(sqlstr, out err);
  84. if (err.Equals("") && ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
  85. {
  86. System.Data.DataRow dr = ds.Tables[0].Rows[0];
  87. return dr;
  88. }
  89. return null;
  90. }
  91. /// <summary>
  92. /// 根据权限配置文件,在数据库中找出对应的表信息
  93. /// </summary>
  94. /// <param name="fileName">权限配置文件名</param>
  95. private XmlDocument ReadXmlDoc(string fileName)
  96. {
  97. XmlDocument doc = new XmlDocument();
  98. try
  99. {
  100. doc.Load(@"CA\" + fileName);
  101. XmlNodeList xnl = doc.ChildNodes[1].ChildNodes;
  102. DataTable dt = GetFormInfoFromDB();
  103. recursionGetNodes(xnl, doc, dt);
  104. return doc;
  105. }
  106. catch (Exception ex)
  107. {
  108. Console.WriteLine(ex.Message);
  109. return null;
  110. }
  111. }
  112. /// <summary>
  113. /// 获取"Default"情况的窗体信息
  114. /// </summary>
  115. /// <param name="xnl">子节点</param>
  116. private void GetDefaultFormInfo(XmlNodeList xnl, XmlDocument doc, DataTable dt)
  117. {
  118. foreach (XmlNode xn in xnl)
  119. {
  120. try
  121. {
  122. string strFormID = xn.Attributes[0].Value.ToString();
  123. DataRow dr = (dt.Select("FunctionID = '" + strFormID + "'"))[0];
  124. AddFormInfoIntoXmlNode(xn, dr, doc);
  125. }
  126. catch (Exception ex)
  127. {
  128. Console.WriteLine(ex.Message);
  129. }
  130. }
  131. }
  132. /// <summary>
  133. /// 获取"Tree"情况的窗体信息
  134. /// 采用递归调用的方式
  135. /// </summary>
  136. /// <param name="xnl">子节点</param>
  137. /// <param name="doc">xml文档</param>
  138. private void recursionGetNodes(XmlNodeList xnl, XmlDocument doc, DataTable dt)
  139. {
  140. foreach (XmlNode xn in xnl)
  141. {
  142. string strFormID = "";
  143. try
  144. {
  145. strFormID = xn.Attributes[0].Value.ToString();
  146. DataRow dr = (dt.Select("FunctionID = '" + strFormID + "'"))[0];
  147. AddFormInfoIntoXmlNode(xn, dr, doc);
  148. }
  149. catch
  150. {
  151. XmlAttribute newAttr = doc.CreateAttribute("FunctionName");
  152. newAttr.Value = strFormID;
  153. xn.Attributes.InsertAfter(newAttr, xn.Attributes[0]);
  154. }
  155. if (xn.ChildNodes.Count > 0)
  156. {
  157. recursionGetNodes(xn.ChildNodes, doc, dt);
  158. }
  159. }
  160. }
  161. /// <summary>
  162. /// 从数据库中获取表信息
  163. /// </summary>
  164. /// <param name="formID">要获取窗体的id号</param>
  165. /// <returns>存有该窗体所有信息的数据行</returns>
  166. private DataTable GetFormInfoFromDB()
  167. {
  168. string sqlstr = "SELECT * FROM UAM_FUNCTION";
  169. System.Data.DataSet ds = DBManager.ExecuteQuery(sqlstr);
  170. if (ds != null && ds.Tables.Count > 0)
  171. {
  172. System.Data.DataTable dt = ds.Tables[0];
  173. return dt;
  174. }
  175. else
  176. return null;
  177. }
  178. /// <summary>
  179. /// 将取道的窗体信息存入xml节点
  180. /// </summary>
  181. /// <param name="xn">要存入的xml节点</param>
  182. /// <param name="dr">获取到的窗体信息</param>
  183. /// <param name="doc">xml文档,用于生成新的属性</param>
  184. private void AddFormInfoIntoXmlNode(XmlNode xn, DataRow dr, XmlDocument doc)
  185. {
  186. if (dr != null)
  187. {
  188. XmlAttribute newAttr = doc.CreateAttribute("AssemblyName");
  189. newAttr.Value = dr["AssemblyName"].ToString().Trim();
  190. xn.Attributes.InsertAfter(newAttr, xn.Attributes[0]);
  191. newAttr = doc.CreateAttribute("ClassName");
  192. newAttr.Value = dr["ClassName"].ToString().Trim();
  193. xn.Attributes.InsertAfter(newAttr, xn.Attributes[1]);
  194. newAttr = doc.CreateAttribute("FunctionName");
  195. newAttr.Value = dr["FunctionName"].ToString().Trim();
  196. xn.Attributes.InsertAfter(newAttr, xn.Attributes[2]);
  197. }
  198. }
  199. private string PasswdSecurity(string pwd)
  200. {
  201. return pwd;
  202. }
  203. private void SetValidateInfo(UserInfo userInfo)
  204. {
  205. if (UserValidate._htUserInfo == null)
  206. UserValidate._htUserInfo = new Hashtable();
  207. string loginID = userInfo.LoginID;
  208. if (UserValidate._htUserInfo.Contains(loginID))
  209. {
  210. UserValidate._htUserInfo[loginID] = userInfo;
  211. }
  212. else
  213. {
  214. UserValidate._htUserInfo.Add(loginID, userInfo);
  215. }
  216. }
  217. private UserInfo SetUserInfo(DataRow dr)
  218. {
  219. UserInfo info;
  220. try
  221. {
  222. info = new UserInfo();
  223. info.LoginID = dr["LOGINID"].ToString();
  224. info.UserID = dr["USERID"].ToString();
  225. info.UserName = dr["NAME"].ToString();
  226. info.ValidateGuid = Guid.NewGuid().ToString();
  227. UpdateValidateGuid(info);
  228. return info;
  229. }
  230. catch (Exception ex)
  231. {
  232. throw ex;
  233. }
  234. }
  235. private void UpdateValidateGuid(UserInfo info)
  236. {
  237. string sqlstr = "UPDATE CXUSER.UAM_AUTHORIZATION SET VALIDATECODE = '"
  238. + info.ValidateGuid + "' WHERE LOGINID = '"
  239. + info.LoginID + "' AND USERID = '"
  240. + info.UserID + "'";
  241. string ErrorInfo = "";
  242. int i = DBManager.ExecuteNonQuery(sqlstr, out ErrorInfo);
  243. if (i == 0)
  244. {
  245. throw new Exception(ErrorInfo);
  246. }
  247. }
  248. public ReturnObject ChangePasswd(string userID, string passwd, string passwdNew)
  249. {
  250. string sqlstr = "SELECT * FROM UAMV_AUTHORROLE WHERE LOGINID = '" + userID + "' AND PASSWORD = '" + PasswdSecurity(passwd) + "'";
  251. string err = "";
  252. System.Data.DataSet ds = DBManager.ExecuteQuery(sqlstr, out err);
  253. if (err != "" || ds == null || ds.Tables.Count == 0)
  254. {
  255. return new ReturnObject(null, "数据库连接错误!");
  256. }
  257. if (ds.Tables[0].Rows.Count == 0)
  258. {
  259. return new ReturnObject(null, "用户名或密码错误!");
  260. }
  261. else
  262. {
  263. sqlstr = "update UAMV_AUTHORROLE set PASSWORD = '" + passwdNew + "' where LOGINID = '" + userID + "'";
  264. err = "";
  265. object obj = DBManager.ExecuteNonQuery(sqlstr, out err);
  266. if (err != "")
  267. {
  268. return new ReturnObject(null, "数据库连接错误!");
  269. }
  270. try
  271. {
  272. if (Convert.ToInt32(obj) > 0)
  273. {
  274. return new ReturnObject(1);
  275. }
  276. else
  277. {
  278. return new ReturnObject(null, "密码修改失败!");
  279. }
  280. }
  281. catch
  282. {
  283. return new ReturnObject(null, "密码修改失败!");
  284. }
  285. }
  286. }
  287. #endregion
  288. #region " Get Files "
  289. public ReturnObject GetFiles()
  290. {
  291. try
  292. {
  293. string[] fileNames = Directory.GetFiles(@"CA\", "*.xml");
  294. return new ReturnObject(fileNames);
  295. }
  296. catch (Exception ex)
  297. {
  298. return new ReturnObject(null, ex.Message);
  299. }
  300. }
  301. #endregion
  302. #region " User Manager "
  303. #region " Department Manager "
  304. public ReturnObject SelectUAM_DEPARTMENT(string strWhere)
  305. {
  306. CheckPartClass();
  307. return _departmentClass.SelectUAM_DEPARTMENT(strWhere);
  308. }
  309. public ReturnObject InsertUAM_DEPARTMENT(ArrayList ar)
  310. {
  311. CheckPartClass();
  312. return _departmentClass.InsertUAM_DEPARTMENT(ar);
  313. }
  314. public ReturnObject DeleteUAM_DEPARTMENT(string strWhere)
  315. {
  316. CheckPartClass();
  317. return _departmentClass.DeleteUAM_DEPARTMENT(strWhere);
  318. }
  319. public ReturnObject UpdateUAM_DEPARTMENT(ArrayList ar)
  320. {
  321. CheckPartClass();
  322. return _departmentClass.UpdateUAM_DEPARTMENT(ar);
  323. }
  324. public ReturnObject UpdateDsPart(DataSet ds, string sqlstr)
  325. {
  326. CheckPartClass();
  327. return _departmentClass.UpdateDataSet(ds, sqlstr);
  328. }
  329. private void CheckPartClass()
  330. {
  331. if (_departmentClass == null)
  332. {
  333. _departmentClass = new UAM_DEPARTMENT();
  334. _departmentClass.DBManager = this.DBManager;
  335. }
  336. }
  337. #endregion
  338. #region " Role Manager "
  339. public ReturnObject SelectUAM_ROLE(string strWhere)
  340. {
  341. CheckRoleClass();
  342. return _roleClass.SelectUAM_ROLE(strWhere);
  343. }
  344. public ReturnObject InsertUAM_ROLE(ArrayList ar)
  345. {
  346. CheckRoleClass();
  347. return _roleClass.InsertUAM_ROLE(ar);
  348. }
  349. public ReturnObject UpdateUAM_ROLE(ArrayList ar)
  350. {
  351. CheckRoleClass();
  352. return _roleClass.UpdateUAM_ROLE(ar);
  353. }
  354. public ReturnObject UpdateDsRole(DataSet ds, string sqlstr)
  355. {
  356. CheckRoleClass();
  357. return _roleClass.UpdateDataSet(ds, sqlstr);
  358. }
  359. public ReturnObject DeleteUAM_ROLE(string strWhere)
  360. {
  361. CheckRoleClass();
  362. return _roleClass.DeleteUAM_ROLE(strWhere);
  363. }
  364. private void CheckRoleClass()
  365. {
  366. if (_roleClass == null)
  367. {
  368. _roleClass = new UAM_ROLE();
  369. _roleClass.DBManager = this.DBManager;
  370. }
  371. }
  372. #endregion
  373. #region " Function Manager "
  374. public ReturnObject SelectUAM_FUNCTION(string strWhere)
  375. {
  376. CheckFuncClass();
  377. return _functionClass.SelectUAM_FUNCTION(strWhere);
  378. }
  379. public ReturnObject UpdateDsFunc(DataSet ds, string sqlstr)
  380. {
  381. CheckFuncClass();
  382. return _functionClass.UpdateDataSet(ds, sqlstr);
  383. }
  384. public ReturnObject DeleteUAM_FUNCTION(string strWhere)
  385. {
  386. CheckFuncClass();
  387. return _functionClass.DeleteUAM_FUNCTION(strWhere);
  388. }
  389. public ReturnObject InsertUAM_FUNCTION(ArrayList ar)
  390. {
  391. CheckFuncClass();
  392. return _functionClass.InsertUAM_FUNCTION(ar);
  393. }
  394. public ReturnObject UpdateUAM_FUNCTION(ArrayList ar)
  395. {
  396. CheckFuncClass();
  397. return _functionClass.UpdateUAM_FUNCTION(ar);
  398. }
  399. private void CheckFuncClass()
  400. {
  401. if (_functionClass == null)
  402. {
  403. _functionClass = new UAM_FUNCTION();
  404. _functionClass.DBManager = this.DBManager;
  405. }
  406. }
  407. #endregion
  408. #region " User Manager "
  409. public ReturnObject SelectUAM_USER(string strWhere)
  410. {
  411. CheckUserClass();
  412. return _userClass.SelectUAM_USER(strWhere);
  413. }
  414. public ReturnObject InsertUAM_USER(ArrayList ar)
  415. {
  416. CheckUserClass();
  417. return _userClass.InsertUAM_USER(ar);
  418. }
  419. public ReturnObject UpdateUAM_USER(ArrayList ar)
  420. {
  421. CheckUserClass();
  422. return _userClass.UpdateUAM_USER(ar);
  423. }
  424. public ReturnObject DeleteUAM_USER(string strWhere)
  425. {
  426. CheckUserClass();
  427. return _userClass.DeleteUAM_USER(strWhere);
  428. }
  429. public ReturnObject UpdateDsUser(DataSet ds, string sqlstr)
  430. {
  431. CheckUserClass();
  432. return _userClass.UpdateDataSet(ds, sqlstr);
  433. }
  434. public ReturnObject GetUAM_USER(string where)
  435. {
  436. CheckUserClass();
  437. return _userClass.GetUAM_USER(where);
  438. }
  439. private void CheckUserClass()
  440. {
  441. if (_userClass == null)
  442. {
  443. _userClass = new UAM_USER();
  444. _userClass.DBManager = this.DBManager;
  445. }
  446. }
  447. #endregion
  448. #region " Author Manager "
  449. public ReturnObject SelectUAM_AUTHORIZATION(string strWhere)
  450. {
  451. CheckAuthorClass();
  452. return _authorClass.SelectUAM_AUTHORIZATION(strWhere);
  453. }
  454. public ReturnObject GetUAM_AUTHORIZATION(string where)
  455. {
  456. CheckAuthorClass();
  457. return _authorClass.GetUAM_AUTHORIZATION(where);
  458. }
  459. public ReturnObject InsertUAM_AUTHORIZATION(ArrayList ar)
  460. {
  461. CheckAuthorClass();
  462. return _authorClass.InsertUAM_AUTHORIZATION(ar);
  463. }
  464. public ReturnObject UpdateUAM_AUTHORIZATION(ArrayList ar)
  465. {
  466. CheckAuthorClass();
  467. return _authorClass.UpdateUAM_AUTHORIZATION(ar);
  468. }
  469. public ReturnObject DeleteUAM_AUTHORIZATION(string strWhere)
  470. {
  471. CheckAuthorClass();
  472. return _authorClass.DeleteUAM_AUTHORIZATION(strWhere);
  473. }
  474. public ReturnObject UpdateAuUser(DataSet ds, string sqlstr)
  475. {
  476. CheckAuthorClass();
  477. return _authorClass.UpdateDataSet(ds, sqlstr);
  478. }
  479. private void CheckAuthorClass()
  480. {
  481. if (_authorClass == null)
  482. {
  483. _authorClass = new UAM_AUTHORIZATION();
  484. _authorClass.DBManager = this.DBManager;
  485. }
  486. }
  487. #endregion
  488. #endregion
  489. #region " Interface "
  490. public void Dispose()
  491. {
  492. }
  493. // public STMes.DBManager DBManager
  494. // {
  495. // set {DBManager = value;}
  496. // get {return DBManager;}
  497. // }
  498. public string Description
  499. {
  500. get
  501. {
  502. string _description = "权限管理服务端,用于在客户端输入用户名密码后";
  503. _description += "由服务端来获取对应权限文件,然后根据权限文件将相应";
  504. _description += "的窗体信息从数据库中读出,再将信息合并到权限";
  505. _description += "文件中,然后将权限文件返回给客户端生成菜单文件";
  506. return _description;
  507. }
  508. }
  509. #endregion
  510. }
  511. }