/// <summary> /// 数据权限过滤 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private static void RepositoryDataProvider_Querying(object sender, QueryingEventArgs e) { var resource = FilterResource.Value; if (resource != null) { var dp = sender as RepositoryDataProvider; if (resource.GeResourceEntityType() == dp.Repository.EntityType.FullName && resource.GetIsSupportDataPermission()) { var currentUser = AccountContext.CurrentUser; var userRoleFilder = Composer.ObjectContainer.Resolve <IUserRoleFinder>(); var roles = userRoleFilder.FindByUser(currentUser); var dataPermissions = CollectDataPermissions(resource.Id, roles); var appender = new DataPermissionWhereAppender(); List <DataPermissionConstraintBuilder> duplicateList = new List <DataPermissionConstraintBuilder>(); foreach (var dataPermission in dataPermissions) { var constraintBuilder = dataPermission.CreateBuilder(); //去掉重复的builder if (!duplicateList.Contains(constraintBuilder)) { appender.ConstrainsBuilders.Add(constraintBuilder); duplicateList.Add(constraintBuilder); } } appender.Append(e.Args.Query); } } }
private static void RepositoryDataProvider_Querying(object sender, QueryingEventArgs e) { var dp = sender as RepositoryDataProvider; if (dp.Repository.EntityMeta.IsPhantomEnabled && !PhantomQueryContext.NeedPhantomData) { //为查询中的 Where 条件添加 "IsPhantom = 'true'" 条件 var appender = new PhantomWhereAppender(); appender.AddConditionToLast = true; appender.Append(e.Args.Query); } }
private static void RepositoryDataProvider_Querying(object sender, QueryingEventArgs e) { var dp = sender as RepositoryDataProvider; if (!PhantomContext.NeedPhantomData.Value) { //为查询中的 Where 条件添加 "IsPhantom = 'false'" 条件 var appender = new PhantomWhereAppender(); appender.AddConditionToLast = true; appender.Append(e.Args.Query); } }
private static void RepositoryDataProvider_Querying(object sender, QueryingEventArgs e) { var dp = sender as RepositoryDataProvider; //如果要查询的实体是一个多租户实体,则需要添加多租户查询的信息。 if (dp.Repository.EntityMeta.GetIsMultiTenancyEnabled()) { //环境中需要提供相应的多租户信息。 var tenantId = TenantContext.TenantId.Value; if (!string.IsNullOrWhiteSpace(tenantId)) { //修改查询中的所有条件。 var modifier = new QueryModifier(); modifier.TenantId = tenantId; modifier.Modify(e.Args.Query); } } }