DataPermissionExtensions.cs 4.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using Hotline.FlowEngine.Workflows;
  2. using Hotline.Repository.SqlSugar.DataPermissions;
  3. using Hotline.Share.Enums.FlowEngine;
  4. using SqlSugar;
  5. using XF.Domain.Entities;
  6. namespace Hotline.Repository.SqlSugar.Extensions
  7. {
  8. public static class DataPermissionExtensions
  9. {
  10. public static ISugarQueryable<TEntity> DataPermissionFiltering<TEntity>(this ISugarQueryable<TEntity> queryable,
  11. IDataPermissionFilterBuilder dataPermissionFilterBuilder)
  12. where TEntity : class, IEntity<string>, IDataPermission, new()
  13. {
  14. return queryable.Where(dataPermissionFilterBuilder.Build<TEntity>());
  15. }
  16. public static ISugarQueryable<TEntity> WorkflowViewFiltering<TEntity>(this ISugarQueryable<TEntity> queryable,
  17. IDataPermissionFilterBuilder dataPermissionFilterBuilder)
  18. where TEntity : class, IEntity<string>, IDataPermission, IWorkflow, new()
  19. {
  20. var session = dataPermissionFilterBuilder.SessionContext;
  21. return queryable.Where(d => SqlFunc.Subqueryable<WorkflowTrace>()
  22. .Where(step => step.ExternalId == d.Id &&
  23. ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == session.RequiredUserId) ||
  24. (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == session.RequiredOrgId) ||
  25. (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && session.Roles.Contains(step.RoleId))))
  26. .Any());
  27. //return queryable.LeftJoin<WorkflowTrace>((d, step) => d.Id == step.ExternalId)
  28. // .Where((d, step) => (step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == session.RequiredUserId) ||
  29. // (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == session.RequiredOrgId) ||
  30. // (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && session.Roles.Contains(step.RoleId)))
  31. // .Select((d, step) => d)
  32. // ;
  33. //return queryable.Where(dataPermissionFilterBuilder.BuildWithFlowViewFilter<TEntity>());
  34. }
  35. public static ISugarQueryable<TEntity> WorkflowHandleFiltering<TEntity>(this ISugarQueryable<TEntity> queryable,
  36. IDataPermissionFilterBuilder dataPermissionFilterBuilder, bool canHandle)
  37. where TEntity : class, IEntity<string>, IDataPermission, IWorkflow, new()
  38. {
  39. var session = dataPermissionFilterBuilder.SessionContext;
  40. return queryable.LeftJoin<WorkflowStep>((d, step) => d.Id == step.ExternalId)
  41. .Where((d, step) => (step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == session.RequiredUserId) ||
  42. (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == session.RequiredOrgId) ||
  43. (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && session.Roles.Contains(step.RoleId)))
  44. .WhereIF(canHandle, (d, step) => step.Status != EWorkflowStepStatus.Handled)
  45. .WhereIF(!canHandle, (d, step) => step.Status == EWorkflowStepStatus.Handled)
  46. .Select((d, step) => d)
  47. ;
  48. //return queryable.Where(dataPermissionFilterBuilder.BuildWithFlowHandleFilter<TEntity>(canHandle));
  49. }
  50. public static TEntity InitDatePermission<TEntity>(this TEntity entity,
  51. IDataPermissionManager dataPermissionManager)
  52. where TEntity : class, IEntity<string>, IDataPermission, new()
  53. {
  54. var result = dataPermissionManager.GetDataPermissionOptions();
  55. entity.CreateDataPermission(result.creatorId, result.creatorName, result.orgId, result.orgName,
  56. result.orgLevel, result.areaId);
  57. return entity;
  58. }
  59. public static TEntity AssignToCreator<TEntity>(this TEntity entity,
  60. IDataPermissionManager dataPermissionManager)
  61. where TEntity : class, IEntity<string>, IDataPermission, IWorkflow, new()
  62. {
  63. var (creatorId, _, _, _, _, _) = dataPermissionManager.GetDataPermissionOptions();
  64. entity.Assign(EFlowAssignType.User, creatorId);
  65. return entity;
  66. }
  67. }
  68. }