|
@@ -44,39 +44,43 @@ public class DataPermissionFilterBuilder : IDataPermissionFilterBuilder, IScopeD
|
|
|
var roles = _sessionContext.Roles;
|
|
|
var orgCode = _sessionContext.RequiredOrgCode;
|
|
|
var scheme = DataPermissionManager.GetQueryFilter<TEntity>(_sessionContext);
|
|
|
- //var (_, orgCode, _, _) = DataPermissionManager.GetDataPermissionOptions();
|
|
|
|
|
|
switch (scheme.QueryFilter)
|
|
|
{
|
|
|
case EAuthorityType.Create:
|
|
|
- return d => d.CreatorId == userId || FlowDataFiltering(d, userId, orgCode, roles);
|
|
|
+ return d => d.CreatorId == userId
|
|
|
+ || d.AssignUserIds.Contains(userId)
|
|
|
+ || d.AssignOrgCodes.Contains(orgCode);
|
|
|
case EAuthorityType.Org:
|
|
|
return d => d.CreatorOrgCode == scheme.OrgCode
|
|
|
|| d.AssignUserIds.Contains(userId)
|
|
|
|| d.AssignOrgCodes.Contains(orgCode)
|
|
|
-
|
|
|
+
|
|
|
//todo 扩展sqlfunc || d.AssignRoles.Intersect(roles).Any()
|
|
|
;
|
|
|
case EAuthorityType.OrgAndBelow:
|
|
|
- return d => d.CreatorOrgCode.StartsWith(scheme.OrgCode) || FlowDataFiltering(d, userId, orgCode, roles);
|
|
|
+ return d => d.CreatorOrgCode.StartsWith(scheme.OrgCode)
|
|
|
+ || d.AssignUserIds.Contains(userId)
|
|
|
+ || d.AssignOrgCodes.Contains(orgCode);
|
|
|
case EAuthorityType.All:
|
|
|
return d => true;
|
|
|
default:
|
|
|
- return d => FlowDataFiltering(d, userId, orgCode, roles);
|
|
|
+ return d => d.AssignUserIds.Contains(userId) || d.AssignOrgCodes.Contains(orgCode);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private static bool FlowDataFiltering<TEntity>(TEntity entity, string userId, string orgCode, string[] roles) where TEntity : class, IEntity<string>, IDataPermission, IWorkflow, new()
|
|
|
- {
|
|
|
- if (entity.AssignUserIds.Contains(userId)) return true;
|
|
|
- foreach (var assignOrgCode in entity.AssignOrgCodes)
|
|
|
- {
|
|
|
- if (assignOrgCode == orgCode) return true;
|
|
|
- var baseOrg = assignOrgCode.Substring(0, 3);
|
|
|
- if (orgCode.StartsWith(baseOrg) && orgCode.Length < assignOrgCode.Length)
|
|
|
- return true;
|
|
|
- }
|
|
|
+ //private static bool FlowDataFiltering<TEntity>(TEntity entity, string userId, string orgCode, string[] roles) where TEntity : class, IEntity<string>, IDataPermission, IWorkflow, new()
|
|
|
+ //{
|
|
|
+ // if (entity.AssignUserIds.Contains(userId)) return true;
|
|
|
+ // foreach (var assignOrgCode in entity.AssignOrgCodes)
|
|
|
+ // {
|
|
|
+ // if (assignOrgCode == orgCode) return true;
|
|
|
+ // var baseOrg = assignOrgCode.Substring(0, 3);
|
|
|
+ // if (orgCode.StartsWith(baseOrg) && orgCode.Length < assignOrgCode.Length)
|
|
|
+ // return true;
|
|
|
+ // }
|
|
|
|
|
|
- return entity.AssignRoles.Intersect(roles).Any();
|
|
|
- }
|
|
|
+ // return false;
|
|
|
+ // //return entity.AssignRoles.Intersect(roles).Any();
|
|
|
+ //}
|
|
|
}
|