|
@@ -1,5 +1,6 @@
|
|
|
using Hotline.Share.Enums.Settings;
|
|
|
using System.Linq.Expressions;
|
|
|
+using SqlSugar;
|
|
|
using XF.Domain.Authentications;
|
|
|
using XF.Domain.Dependency;
|
|
|
using XF.Domain.Entities;
|
|
@@ -41,21 +42,27 @@ public class DataPermissionFilterBuilder : IDataPermissionFilterBuilder, IScopeD
|
|
|
{
|
|
|
var userId = _sessionContext.RequiredUserId;
|
|
|
var roles = _sessionContext.Roles;
|
|
|
+ var orgCode = _sessionContext.RequiredOrgCode;
|
|
|
var scheme = DataPermissionManager.GetQueryFilter<TEntity>(_sessionContext);
|
|
|
- var (_, depCode, _, _) = DataPermissionManager.GetDataPermissionOptions();
|
|
|
+ //var (_, orgCode, _, _) = DataPermissionManager.GetDataPermissionOptions();
|
|
|
|
|
|
switch (scheme.QueryFilter)
|
|
|
{
|
|
|
case EAuthorityType.Create:
|
|
|
- return d => d.CreatorId == userId || FlowDataFiltering(d, userId, depCode, roles);
|
|
|
+ return d => d.CreatorId == userId || FlowDataFiltering(d, userId, orgCode, roles);
|
|
|
case EAuthorityType.Org:
|
|
|
- return d => d.CreatorOrgCode == scheme.OrgCode || FlowDataFiltering(d, userId, depCode, roles);
|
|
|
+ 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, depCode, roles);
|
|
|
+ return d => d.CreatorOrgCode.StartsWith(scheme.OrgCode) || FlowDataFiltering(d, userId, orgCode, roles);
|
|
|
case EAuthorityType.All:
|
|
|
return d => true;
|
|
|
default:
|
|
|
- return d => FlowDataFiltering(d, userId, depCode, roles);
|
|
|
+ return d => FlowDataFiltering(d, userId, orgCode, roles);
|
|
|
}
|
|
|
}
|
|
|
|