Ejemplo n.º 1
0
        /// <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);
                }
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
                }
            }
        }