DefaultUserValidator.cs
上传用户:li2971742
上传日期:2021-11-18
资源大小:39096k
文件大小:11k
源码类别:

OA系统

开发平台:

C#

  1. using System;
  2. using OThinker.Data;
  3. namespace OThinker.H3.Portal
  4. {
  5. /// <summary>
  6. /// 该类用于读取活动目录中的用户权限信息
  7. /// </summary>
  8. [System.Serializable]
  9. public class DefaultUserValidator : UserValidator
  10. {
  11.         /// <summary>
  12.         /// 构造函数
  13.         /// </summary>
  14.         /// <param name="UserID"></param>
  15.         public DefaultUserValidator(string UserID)
  16.             :
  17. base(UserID)
  18. {
  19. }
  20. #region 是否用于管理员权限
  21. /// <summary>
  22. /// 用于缓存验证,以免每次都去访问数据库
  23. /// </summary>
  24. private BoolMatchValue _ValidateAdministrator = BoolMatchValue.Unspecified;
  25. /// <summary>
  26. /// 验证当前用户是否具有管理员的权限
  27. /// </summary>
  28. /// <returns></returns>
  29. public override bool ValidateAdministrator()
  30. {
  31. // 首先检查是否是第一次获取该信息
  32. if(this._ValidateAdministrator == BoolMatchValue.Unspecified)
  33. {
  34. // 检查当前用户是否管理员
  35.                 if (OThinker.H3.Server.Engine.Organization.IsAdministrator(this.UserID))
  36. {
  37. this._ValidateAdministrator = BoolMatchValue.True;
  38. }
  39. else
  40. {
  41. this._ValidateAdministrator = BoolMatchValue.False;
  42. // 检查隶属于的组是否是服务器系统上的管理员或者域管理员
  43. if(this.MemberOfs != null && this.MemberOfs.Length != 0)
  44. {
  45. foreach(string memberOf in this.MemberOfs)
  46. {
  47. // 如果是管理员组的或者域管理员组的
  48.                             if (OThinker.H3.Server.Engine.Organization.IsAdministrator(memberOf))
  49. {
  50. this._ValidateAdministrator = BoolMatchValue.True;
  51. break;
  52. }
  53. }
  54. }
  55. // 如果属于服务器上的管理员,则不再检查,否则去数据库中检查该用户或者他属于的组是否管理员
  56. if(this._ValidateAdministrator == BoolMatchValue.True)
  57. {
  58. }
  59.                     else if (OThinker.H3.Server.Engine.SystemAclManager.Check(new string[]{this.UserID}, Acl.AclType.Admin))
  60. {
  61. // 检查是否属于本系统的管理员
  62. this._ValidateAdministrator = BoolMatchValue.True;
  63. }
  64. else if(OThinker.H3.Server.Engine.SystemAclManager.Check(this.RecursiveMemberOfs, Acl.AclType.Admin))
  65. {
  66. // 检查该用户所在的组或者组织单元是否拥有该权限
  67. this._ValidateAdministrator = BoolMatchValue.True;
  68. }
  69. else
  70. {
  71. this._ValidateAdministrator = BoolMatchValue.False;
  72. }
  73. }
  74. }
  75. return this._ValidateAdministrator == BoolMatchValue.True;
  76. }
  77. #endregion
  78. #region 是否能够发布新的流程
  79. private BoolMatchValue _ValidatePublishWorkflow = BoolMatchValue.Unspecified;
  80.         /// <summary>
  81.         /// 验证是否能够发布新版本
  82.         /// </summary>
  83.         /// <returns></returns>
  84. public override bool ValidatePublishWorkflow()
  85. {
  86. if(this._ValidatePublishWorkflow == BoolMatchValue.Unspecified)
  87. {
  88. if(this.ValidateAdministrator())
  89. {
  90. this._ValidatePublishWorkflow = BoolMatchValue.True;
  91. }
  92.                 else if (
  93.                     OThinker.H3.Server.Engine.SystemAclManager.Check(new string[]{this.UserID}, Acl.AclType.PublishWorkflow) ||
  94.                     OThinker.H3.Server.Engine.SystemAclManager.Check(this.RecursiveMemberOfs, Acl.AclType.PublishWorkflow))
  95. {
  96. // 检查该用户所在的组或者组织单元是否拥有该权限
  97. this._ValidatePublishWorkflow = BoolMatchValue.True;
  98. }
  99. else
  100. {
  101. this._ValidatePublishWorkflow = BoolMatchValue.False;
  102. }
  103. }
  104. return this._ValidatePublishWorkflow == BoolMatchValue.True;
  105. }
  106. #endregion
  107.         #region 是否能够查看报表
  108.         private BoolMatchValue _ValidateViewReport = BoolMatchValue.Unspecified;
  109.         /// <summary>
  110.         /// 是否能够查看报表
  111.         /// </summary>
  112.         /// <returns></returns>
  113.         public override bool ValidateViewReport()
  114.         {
  115.             if (this._ValidateViewReport == BoolMatchValue.Unspecified)
  116.             {
  117.                 if (this.ValidateAdministrator())
  118.                 {
  119.                     this._ValidateViewReport = BoolMatchValue.True;
  120.                 }
  121.                 else if (
  122.                     OThinker.H3.Server.Engine.SystemAclManager.Check(new string[] { this.UserID }, Acl.AclType.ViewReport) ||
  123.                     OThinker.H3.Server.Engine.SystemAclManager.Check(this.RecursiveMemberOfs, Acl.AclType.ViewReport))
  124.                 {
  125.                     // 检查该用户所在的组或者组织单元是否拥有该权限
  126.                     this._ValidateViewReport = BoolMatchValue.True;
  127.                 }
  128.                 else
  129.                 {
  130.                     this._ValidateViewReport = BoolMatchValue.False;
  131.                 }
  132.             }
  133.             return this._ValidateViewReport == BoolMatchValue.True;
  134.         }
  135.         #endregion
  136. #region 是否拥有流程模板的授权权限
  137. // 单元为(WorkflowFullName, BoolMatchValue)
  138. private System.Collections.Hashtable WorkflowAdministrotorValidationTable = new System.Collections.Hashtable();
  139.         /// <summary>
  140.         /// 是否拥有流程模板的授权权限
  141.         /// </summary>
  142.         /// <param name="WorkflowPackage"></param>
  143.         /// <param name="WorkflowName"></param>
  144.         /// <returns></returns>
  145. public override bool ValidateWorkflowAdministrator(string WorkflowPackage, string WorkflowName)
  146. {
  147.             string processFullName = H3.WorkflowTemplate.WorkflowTemplate.GetWorkflowFullName(WorkflowPackage, WorkflowName);
  148. if(!this.WorkflowAdministrotorValidationTable.Contains(processFullName))
  149. {
  150. OThinker.Data.BoolMatchValue validation;
  151. if(
  152. // 是否是系统管理员权限
  153. this.ValidateAdministrator() ||
  154. // 是否拥有流程管理员权限
  155.                     OThinker.H3.Server.Engine.WorkflowAclManager.Check(
  156.     new string[]{this.UserID}, 
  157.     WorkflowPackage, 
  158.     WorkflowName, 
  159.     Acl.AclType.Admin) || 
  160. // 所属的组是否拥有流程管理员的权限
  161.                     OThinker.H3.Server.Engine.WorkflowAclManager.Check(
  162.     this.RecursiveMemberOfs, 
  163.     WorkflowPackage, 
  164.     WorkflowName,
  165.                         Acl.AclType.Admin))
  166. {
  167. // 检查该用户所在的组或者组织单元是否拥有该权限
  168. validation = BoolMatchValue.True;
  169. }
  170. else
  171. {
  172. validation = BoolMatchValue.False;
  173. }
  174. this.WorkflowAdministrotorValidationTable.Add(processFullName, validation);
  175. }
  176. return (BoolMatchValue)this.WorkflowAdministrotorValidationTable[processFullName] == BoolMatchValue.True;
  177. }
  178. #endregion
  179. #region 发起流程的权限
  180. // 单元为(WorkflowFullName, BoolMatchValue)
  181. private System.Collections.Hashtable CreateInstanceValidationTable = new System.Collections.Hashtable();
  182.         /// <summary>
  183.         /// 是否拥有创建流程的权限
  184.         /// </summary>
  185.         /// <param name="WorkflowPackage"></param>
  186.         /// <param name="WorkflowName"></param>
  187.         /// <returns></returns>
  188. public override bool ValidateCreateInstance(string WorkflowPackage, string WorkflowName)
  189. {
  190.             string processFullName = H3.WorkflowTemplate.WorkflowTemplate.GetWorkflowFullName(WorkflowPackage, WorkflowName);
  191. if(!this.CreateInstanceValidationTable.Contains(processFullName))
  192. {
  193. OThinker.Data.BoolMatchValue validation;
  194. if(
  195. // 是否是系统管理员权限
  196. this.ValidateAdministrator() ||
  197. // 是否为流程管理员
  198. this.ValidateWorkflowAdministrator(WorkflowPackage, WorkflowName) || 
  199.                     // 没有对工作流模板权限做定义
  200.                     OThinker.H3.Server.Engine.WorkflowAclManager.GetAclCount(
  201.                         WorkflowPackage, 
  202.                         WorkflowName) == 0 || 
  203. // 是否拥有流程发起权限
  204.                     OThinker.H3.Server.Engine.WorkflowAclManager.Check(
  205.     new string[]{this.UserID}, 
  206.     WorkflowPackage, 
  207.     WorkflowName,
  208.                         Acl.AclType.CreateInstance) || 
  209. // 所在的组是否拥有流程发起权限
  210.                     OThinker.H3.Server.Engine.WorkflowAclManager.Check(
  211.     this.RecursiveMemberOfs, 
  212.     WorkflowPackage, 
  213.     WorkflowName,
  214.                         Acl.AclType.CreateInstance))
  215. {
  216. // 检查该用户所在的组或者组织单元是否拥有该权限
  217. validation = BoolMatchValue.True;
  218. }
  219. else
  220. {
  221. validation = BoolMatchValue.False;
  222. }
  223. this.CreateInstanceValidationTable.Add(processFullName, validation);
  224. }
  225. return (BoolMatchValue)this.CreateInstanceValidationTable[processFullName] == BoolMatchValue.True;
  226. }
  227. #endregion
  228. #region 管理实例的权限
  229. // 单元为(InstanceId, BoolMatchValue)
  230. private System.Collections.Hashtable InstanceAdministrotorValidationTable = new System.Collections.Hashtable();
  231.         /// <summary>
  232.         /// 管理流程实例的权限
  233.         /// </summary>
  234.         /// <param name="InstanceId"></param>
  235.         /// <returns></returns>
  236. public override bool ValidateInstanceAdministrator(string InstanceId)
  237. {
  238. if(!this.InstanceAdministrotorValidationTable.Contains(InstanceId))
  239. {
  240. OThinker.Data.BoolMatchValue validation;
  241. if(
  242. // 是否是系统管理员权限
  243. this.ValidateAdministrator() ||
  244. // 是否拥有流程管理员权限
  245.                     OThinker.H3.Server.Engine.InstanceAclManager.Query(
  246. new string[]{this.UserID}, 
  247. InstanceId, 
  248. OThinker.Data.BoolMatchValue.True, 
  249. OThinker.Data.BoolMatchValue.Unspecified).Length != 0 || 
  250. // 所属的组是否拥有流程管理员的权限
  251.                     OThinker.H3.Server.Engine.InstanceAclManager.Query(
  252. this.RecursiveMemberOfs, 
  253. InstanceId, 
  254. OThinker.Data.BoolMatchValue.True, 
  255. OThinker.Data.BoolMatchValue.Unspecified).Length != 0)
  256. {
  257. // 检查该用户所在的组或者组织单元是否拥有该权限
  258. validation = BoolMatchValue.True;
  259. }
  260. else
  261. {
  262. validation = BoolMatchValue.False;
  263. }
  264. this.InstanceAdministrotorValidationTable.Add(InstanceId, validation);
  265. }
  266. return (BoolMatchValue)this.InstanceAdministrotorValidationTable[InstanceId] == BoolMatchValue.True;
  267. }
  268. #endregion
  269. #region 查看实例的权限
  270. // 单元为(InstanceId, BoolMatchValue)
  271. private System.Collections.Hashtable InstanceViewValidationTable = new System.Collections.Hashtable();
  272.         /// <summary>
  273.         /// 查看流程实例的权限
  274.         /// </summary>
  275.         /// <param name="InstanceId"></param>
  276.         /// <returns></returns>
  277. public override bool ValidateInstanceView(string InstanceId)
  278. {
  279. if(!this.InstanceViewValidationTable.Contains(InstanceId))
  280. {
  281. OThinker.Data.BoolMatchValue validation;
  282. if(
  283. // 是否是系统管理员权限
  284. this.ValidateAdministrator() ||
  285. // 是否有管理该实例的权限
  286. this.ValidateInstanceAdministrator(InstanceId) || 
  287. // 是否拥有流程管理员权限
  288.                     OThinker.H3.Server.Engine.InstanceAclManager.Query(
  289. new string[]{this.UserID}, 
  290. InstanceId, 
  291. OThinker.Data.BoolMatchValue.Unspecified, 
  292. OThinker.Data.BoolMatchValue.True).Length != 0 || 
  293. // 所属的组是否拥有流程管理员的权限
  294.                     OThinker.H3.Server.Engine.InstanceAclManager.Query(
  295. this.RecursiveMemberOfs, 
  296. InstanceId, 
  297. OThinker.Data.BoolMatchValue.Unspecified, 
  298. OThinker.Data.BoolMatchValue.True).Length != 0)
  299. {
  300. // 检查该用户所在的组或者组织单元是否拥有该权限
  301. validation = BoolMatchValue.True;
  302. }
  303. else
  304. {
  305. validation = BoolMatchValue.False;
  306. }
  307. this.InstanceViewValidationTable.Add(InstanceId, validation);
  308. }
  309. return (BoolMatchValue)this.InstanceViewValidationTable[InstanceId] == BoolMatchValue.True;
  310. }
  311. #endregion
  312. }
  313. }