Ejemplo n.º 1
0
        /// <summary>
        /// 获取用户权限数据
        /// </summary>
        /// <param name="accid"></param>
        /// <param name="dataOp"></param>
        /// <param name="withInActive"></param>
        /// <returns></returns>
        public virtual async Task <IQueryable <T> > _GetPermissionData(string accid, DataOperateEnum dataOp, bool withInActive = false)
        {
            var emptyQuery = Enumerable.Empty <T>().AsQueryable();
            var query      = emptyQuery;

            var currentAcc = await _DbContext.Accounts.Select(x => new Account()
            {
                Id = x.Id, OrganizationId = x.OrganizationId, Type = x.Type
            }).FirstOrDefaultAsync(x => x.Id == accid);

            if (currentAcc == null)
            {
                return(query);
            }

            //数据状态
            if (withInActive)
            {
                query = _DbContext.Set <T>();
            }
            else
            {
                query = _DbContext.Set <T>().Where(x => x.ActiveFlag == AppConst.I_DataState_Active);
            }

            /*
             * 读取,修改,删除操作
             *      管理员:操作自己组织的创建的
             *      用户:操作自己创建的数据
             */


            if (currentAcc.Type == AppConst.AccountType_BrandAdmin || currentAcc.Type == AppConst.AccountType_PartnerAdmin || currentAcc.Type == AppConst.AccountType_SupplierAdmin)
            {
                return(query.Where(x => x.OrganizationId == currentAcc.OrganizationId));
            }


            return(query.Where(x => x.Creator == accid));

            #region 待移除
            //#region func getPersonalResource 获取个人资源
            //var getPersonalResource = new Func<IQueryable<T>, IQueryable<T>>((q) =>
            //{
            //    return q.Where(x => x.Creator == currentAcc.Id);
            //});
            //#endregion
            //#region func getCurrentOrganResource 获取当前组织资源
            //var getCurrentOrganResource = new Func<IQueryable<T>, IQueryable<T>>((q) =>
            //{
            //    return q.Where(x => x.OrganizationId == currentAcc.OrganizationId);
            //});
            //#endregion
            //#region func getSupResource 获取上级组织资源
            //var getSupResource = new Func<IQueryable<T>, IQueryable<T>>((q) =>
            //{
            //    var treeQ = _PermissionTreeRepository.GetAncestorNode(organNode, new List<string>() { AppConst.S_NodeType_Organization });
            //    return q.Where(x => x.Creator == currentAcc.Id);
            //});
            //#endregion
            //#region func getSubOrganResource 获取下级组织资源
            //var getSubOrganResource = new Func<IQueryable<T>, IQueryable<T>>((q) =>
            //{
            //    var treeQ = _PermissionTreeRepository.GetDescendantNode(organNode, new List<string>() { AppConst.S_NodeType_Organization });
            //    return from it in query
            //           join tq in treeQ on it.OrganizationId equals tq.ObjId
            //           select it;
            //});
            //#endregion


            //#region [SysAdmin]
            //if (currentAcc.Type == AppConst.AccountType_SysAdmin)
            //{
            //    return query;
            //}
            //#endregion
            //#region [BrandAdmin]
            //else if (currentAcc.Type == AppConst.AccountType_BrandAdmin)
            //{
            //    var treeQ = _PermissionTreeRepository.GetDescendantNode(organNode, new List<string>() { AppConst.S_NodeType_Organization }, true);

            //    return from it in query
            //           join tq in treeQ on it.OrganizationId equals tq.ObjId
            //           select it;
            //}
            //#endregion
            //#region [BrandMember]
            //else if (currentAcc.Type == AppConst.AccountType_BrandMember)
            //{
            //    if (ResourceTypeSetting == ResourceTypeEnum.Organizational)
            //    {
            //        if (dataOp == DataOperateEnum.Retrieve)
            //            return getCurrentOrganResource(query);
            //    }

            //    if (ResourceTypeSetting == ResourceTypeEnum.Organizational_SubShare)
            //    {
            //        if (dataOp == DataOperateEnum.Retrieve)
            //        {
            //            var currentOrganQ = getCurrentOrganResource(query);
            //            var supOrganQ = getSupResource(query);
            //            return currentOrganQ.Union(supOrganQ);
            //        }
            //    }
            //}
            //#endregion
            //#region [PartnerAdmin]
            //else if (currentAcc.Type == AppConst.AccountType_PartnerAdmin)
            //{
            //    //var treeQ =await _PermissionTreeRepository.GetAncestorNode(organNode, new List<string>() { AppConst.S_NodeType_Organization }, true);
            //    //return from it in query
            //    //       join tq in treeQ on it.OrganizationId equals tq.ObjId
            //    //       select it;

            //    if (ResourceTypeSetting == ResourceTypeEnum.Organizational)
            //    {
            //        return getCurrentOrganResource(query);
            //    }

            //    if (ResourceTypeSetting == ResourceTypeEnum.Organizational_SubShare)
            //    {
            //        if (dataOp == DataOperateEnum.Retrieve)
            //        {
            //            var treeQ = await _PermissionTreeRepository.GetAncestorNode(organNode, new List<string>() { AppConst.S_NodeType_Organization }, true);
            //            return from it in query
            //                   join tq in treeQ on it.OrganizationId equals tq.ObjId
            //                   select it;
            //        }
            //    }
            //}
            //#endregion
            //#region [PartnerMember]
            //else if (currentAcc.Type == AppConst.AccountType_PartnerMember)
            //{
            //    if (ResourceTypeSetting == ResourceTypeEnum.Organizational)
            //    {
            //        if (dataOp == DataOperateEnum.Retrieve)
            //        {
            //            return getCurrentOrganResource(query);
            //        }
            //    }

            //    if (ResourceTypeSetting == ResourceTypeEnum.Organizational_SubShare)
            //    {
            //        if (dataOp == DataOperateEnum.Retrieve)
            //        {
            //            var treeQ = await _PermissionTreeRepository.GetAncestorNode(organNode, new List<string>() { AppConst.S_NodeType_Organization }, true);
            //            return from it in query
            //                   join tq in treeQ on it.OrganizationId equals tq.ObjId
            //                   select it;
            //        }
            //    }
            //}
            //#endregion
            //#region [SupplierAdmin]
            //else if (currentAcc.Type == AppConst.AccountType_SupplierAdmin)
            //{
            //    var treeQ = _PermissionTreeRepository.GetDescendantNode(organNode, new List<string>() { AppConst.S_NodeType_Organization }, true);
            //    return from it in query
            //           join tq in treeQ on it.OrganizationId equals tq.ObjId
            //           select it;
            //}
            //#endregion
            //#region [SupplierMember]
            //else if (currentAcc.Type == AppConst.AccountType_SupplierMember)
            //{
            //    if (ResourceTypeSetting == ResourceTypeEnum.Organizational)
            //    {
            //        if (dataOp == DataOperateEnum.Retrieve)
            //            return getCurrentOrganResource(query);
            //    }

            //    if (ResourceTypeSetting == ResourceTypeEnum.Organizational_SubShare)
            //    {
            //        if (dataOp == DataOperateEnum.Retrieve)
            //        {
            //            var currentOrganQ = getCurrentOrganResource(query);
            //            var supOrganQ = getSupResource(query);
            //            return currentOrganQ.Union(supOrganQ);
            //        }
            //    }
            //}
            //#endregion
            //#region [Default]
            //else
            //{
            //    return getPersonalResource(query);
            //}
            //#endregion

            //return getPersonalResource(query);
            #endregion
        }
        public override async Task <IQueryable <WorkFlowRule> > _GetPermissionData(string accid, DataOperateEnum dataOp, bool withInActive = false)
        {
            var query = Enumerable.Empty <WorkFlowRule>().AsQueryable();

            var currentAcc = await _DbContext.Accounts.Select(x => new Account()
            {
                Id = x.Id, OrganizationId = x.OrganizationId, Type = x.Type
            }).FirstOrDefaultAsync(x => x.Id == accid);

            if (currentAcc == null)
            {
                return(query);
            }

            //数据状态
            if (withInActive)
            {
                query = _DbContext.Set <WorkFlowRule>();
            }
            else
            {
                query = _DbContext.Set <WorkFlowRule>().Where(x => x.ActiveFlag == AppConst.I_DataState_Active);
            }



            if (dataOp != DataOperateEnum.Retrieve)
            {
                return(query.Where(x => x.Creator == currentAcc.Id));
            }
            return(await Task.FromResult(query));
        }
Ejemplo n.º 3
0
        public override async Task <IQueryable <UserRole> > _GetPermissionData(string accid, DataOperateEnum dataOp, bool withInActive = false)
        {
            var query = Enumerable.Empty <UserRole>().AsQueryable();

            var currentAcc = await _DbContext.Accounts.Select(x => new Account()
            {
                Id = x.Id, OrganizationId = x.OrganizationId, Type = x.Type
            }).FirstOrDefaultAsync(x => x.Id == accid);

            if (currentAcc == null)
            {
                return(query);
            }

            //数据状态
            if (withInActive)
            {
                query = _DbContext.Set <UserRole>();
            }
            else
            {
                query = _DbContext.Set <UserRole>().Where(x => x.ActiveFlag == AppConst.I_DataState_Active);
            }



            if (dataOp != DataOperateEnum.Retrieve)
            {
                //超级管理员只管理内置角色
                if (currentAcc.Type == AppConst.AccountType_SysAdmin || currentAcc.Type == AppConst.AccountType_SysService)
                {
                    query = query.Where(x => x.IsInner == true);
                    return(query);
                }


                //品牌商管理员管理自己建立的角色
                if (currentAcc.Type == AppConst.AccountType_BrandAdmin)
                {
                    query = query.Where(x => x.OrganizationId == currentAcc.OrganizationId);
                    return(query);
                }


                return(query.Where(x => x.Creator == currentAcc.Id));
            }
            query = query.Where(x => x.IsInner == true || x.OrganizationId == currentAcc.OrganizationId);
            return(await Task.FromResult(query));
        }
Ejemplo n.º 4
0
        public override async Task <IQueryable <Navigation> > _GetPermissionData(string accid, DataOperateEnum dataOp, bool withInActive = false)
        {
            var emptyQuery = Enumerable.Empty <Navigation>().AsQueryable();
            var query      = emptyQuery;


            //数据状态
            if (withInActive)
            {
                query = _DbContext.Set <Navigation>();
            }
            else
            {
                query = _DbContext.Set <Navigation>().Where(x => x.ActiveFlag == AppConst.I_DataState_Active);
            }

            return(await Task.FromResult(query));
        }
Ejemplo n.º 5
0
        public async override Task <IQueryable <FileAsset> > _GetPermissionData(string accid, DataOperateEnum dataOp, bool withInActive = false)
        {
            IQueryable <FileAsset> query;

            //数据状态
            if (withInActive)
            {
                query = _DbContext.Set <FileAsset>();
            }
            else
            {
                query = _DbContext.Set <FileAsset>().Where(x => x.ActiveFlag == AppConst.I_DataState_Active);
            }

            var currentAcc = await _DbContext.Accounts.Select(x => new Account()
            {
                Id = x.Id, OrganizationId = x.OrganizationId, Type = x.Type
            }).FirstOrDefaultAsync(x => x.Id == accid);

            if (dataOp != DataOperateEnum.Retrieve)
            {
                if (currentAcc.Type == UserRoleConst.SysAdmin)
                {
                    return(query);
                }
                else if (currentAcc.Type == UserRoleConst.BrandAdmin)
                {
                    query = query.Where(x => x.OrganizationId == currentAcc.OrganizationId);
                    return(query);
                }
                else if (currentAcc.Type == UserRoleConst.PartnerAdmin)
                {
                    query = query.Where(x => x.OrganizationId == currentAcc.OrganizationId);
                    return(query);
                }
                else if (currentAcc.Type == UserRoleConst.SupplierAdmin)
                {
                    query = query.Where(x => x.OrganizationId == currentAcc.OrganizationId);
                    return(query);
                }
                else
                {
                }
            }
            else
            {
                return(query);
            }

            return(await Task.FromResult(query.Where(x => x.Creator == currentAcc.Id)));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 获取操作权限数据
        /// </summary>
        /// <param name="accid"></param>
        /// <param name="dataOp"></param>
        /// <param name="withInActive"></param>
        /// <returns></returns>
        public override async Task <IQueryable <Account> > _GetPermissionData(string accid, DataOperateEnum dataOp, bool withInActive = false)
        {
            var emptyQuery = Enumerable.Empty <Account>().AsQueryable();
            var query      = emptyQuery;

            var currentAcc = await _DbContext.Accounts.FirstOrDefaultAsync(x => x.Id == accid);

            if (currentAcc == null)
            {
                return(query);
            }

            //数据状态
            if (withInActive)
            {
                query = _DbContext.Set <Account>();
            }
            else
            {
                query = _DbContext.Set <Account>().Where(x => x.ActiveFlag == AppConst.I_DataState_Active);
            }


            if (currentAcc.Type == AppConst.AccountType_SysAdmin)
            {
                return(query);
            }
            else
            {
                //组织管理员(包括合伙人|供应商)能管理自己组织下普通用户和第一层级管理员信息
                //组织所属管理员可以管理自己组织管理员

                #region [U,D]
                if (dataOp == DataOperateEnum.Update || dataOp == DataOperateEnum.Delete)
                {
                    var ownOrganUserQ           = query.Where(x => x.OrganizationId == currentAcc.OrganizationId);
                    var onLevelDownOrganIdsQ    = _DbContext.Organizations.Where(x => x.ParentId == currentAcc.OrganizationId).Select(x => x.Id);
                    var oneLevelDownOrganAdminQ = query.Where(x => onLevelDownOrganIdsQ.Contains(x.OrganizationId));

                    var a1 = ownOrganUserQ.ToList();
                    var a2 = onLevelDownOrganIdsQ.ToList();
                    var a3 = oneLevelDownOrganAdminQ.ToList();
                    var a4 = ownOrganUserQ.Union(oneLevelDownOrganAdminQ).ToList();

                    return(ownOrganUserQ.Union(oneLevelDownOrganAdminQ));
                }
                #endregion

                #region [R]
                if (dataOp == DataOperateEnum.Retrieve)
                {
                    var ownOrganIdsQ = (await(_PermissionTreeRepository as PermissionTreeRepository).GetOrganManageNode(currentAcc.OrganizationId, new List <string>()
                    {
                        AppConst.S_NodeType_Organization
                    }, true)).Select(x => x.ObjId);
                    return(query.Where(x => ownOrganIdsQ.Contains(x.OrganizationId)));
                }
                #endregion
            }
            return(emptyQuery);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 获取权限数据
        /// </summary>
        /// <param name="accid"></param>
        /// <param name="dataOp"></param>
        /// <param name="withInActive"></param>
        /// <returns></returns>
        public async override Task <IQueryable <Layout> > _GetPermissionData(string accid, DataOperateEnum dataOp, bool withInActive = true)
        {
            IQueryable <Layout> query;


            var currentAcc = await _DbContext.Accounts.Select(x => new Account()
            {
                Id = x.Id, OrganizationId = x.OrganizationId, Type = x.Type
            }).FirstOrDefaultAsync(x => x.Id == accid);

            //数据状态
            if (withInActive)
            {
                query = _DbContext.Set <Layout>();
            }
            else
            {
                query = _DbContext.Set <Layout>().Where(x => x.ActiveFlag == AppConst.I_DataState_Active);
            }

            //超级管理员系列不走权限判断
            if (currentAcc.Type == AppConst.AccountType_SysAdmin || currentAcc.Type == AppConst.AccountType_SysService)
            {
                return(await Task.FromResult(query));
            }



            if (dataOp == DataOperateEnum.Retrieve)
            {
                /*
                 * 读取操作
                 *      管理员:获取包括自己组织以及下级组织的有读取权限的数据
                 *      普通用户:获取自己组织的
                 */


                if (currentAcc.Type == AppConst.AccountType_BrandAdmin || currentAcc.Type == AppConst.AccountType_BrandMember)
                {
                    var organNode = await _DbContext.PermissionTrees.FirstOrDefaultAsync(x => x.ObjId == currentAcc.OrganizationId);

                    var organNodeQ = _PermissionTreeRepository.GetDescendantNode(organNode, new List <string>()
                    {
                        AppConst.S_NodeType_Organization
                    }, true);
                    var organIds = organNodeQ.Select(x => x.ObjId).ToList();

                    query = from it in query
                            where organIds.Contains(it.OrganizationId)
                            select it;
                    return(query);
                }

                if (currentAcc.Type == AppConst.AccountType_PartnerAdmin || currentAcc.Type == AppConst.AccountType_PartnerMember)
                {
                    var organNode = await _DbContext.PermissionTrees.FirstOrDefaultAsync(x => x.ObjId == currentAcc.OrganizationId);

                    var organNodeQ = _PermissionTreeRepository.GetDescendantNode(organNode, new List <string>()
                    {
                        AppConst.S_NodeType_Organization
                    }, true);
                    var organIds = organNodeQ.Select(x => x.ObjId).ToList();

                    var permissionIdQ = _DbContext.ResourcePermissions.Where(x => organIds.Contains(x.OrganizationId) && x.ResType == ResType && x.OpRetrieve == 1);

                    query = from it in query
                            join ps in permissionIdQ on it.Id equals ps.ResId
                            select it;
                    return(query);
                }
            }
            else
            {
                /*
                 * 改,删操作
                 *      管理员:只获取自己组织创建的
                 *      普通用户:获取自己创建的
                 */

                if (currentAcc.Type == AppConst.AccountType_BrandAdmin || currentAcc.Type == AppConst.AccountType_PartnerAdmin || currentAcc.Type == AppConst.AccountType_SupplierAdmin)
                {
                    var permissionIdQ = _DbContext.ResourcePermissions.Where(x => x.OrganizationId == currentAcc.OrganizationId && x.ResType == ResType && x.OpRetrieve == 1);

                    query = from it in query
                            join ps in permissionIdQ on it.Id equals ps.ResId
                            select it;
                    return(query);
                }
            }

            //普通用户
            return(await Task.FromResult(query.Where(x => x.Creator == currentAcc.Id)));
        }
        /// <summary>
        /// 获取权限数据
        /// </summary>
        /// <param name="accid"></param>
        /// <param name="dataOp"></param>
        /// <param name="withInActive"></param>
        /// <returns></returns>
        public override async Task <IQueryable <StaticMesh> > _GetPermissionData(string accid, DataOperateEnum dataOp, bool withInActive = false)
        {
            IQueryable <StaticMesh> query;

            var currentAcc = await _DbContext.Accounts.Select(x => new Account()
            {
                Id = x.Id, OrganizationId = x.OrganizationId, Type = x.Type
            }).FirstOrDefaultAsync(x => x.Id == accid);

            //数据状态
            if (withInActive)
            {
                query = _DbContext.Set <StaticMesh>();
            }
            else
            {
                query = _DbContext.Set <StaticMesh>().Where(x => x.ActiveFlag == AppConst.I_DataState_Active);
            }

            //超级管理员系列不走权限判断
            if (currentAcc.Type == AppConst.AccountType_SysAdmin || currentAcc.Type == AppConst.AccountType_SysService)
            {
                return(await Task.FromResult(query));
            }


            if (dataOp == DataOperateEnum.Retrieve)
            {
                return(query);
            }
            else
            {
                if (currentAcc.Type == AppConst.AccountType_BrandAdmin || currentAcc.Type == AppConst.AccountType_BrandMember)
                {
                    return(query);
                }
            }

            return(query.Take(0));
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 获取操作权限数据
        /// </summary>
        /// <param name="accid"></param>
        /// <param name="dataOp"></param>
        /// <param name="withInActive"></param>
        /// <returns></returns>
        public override async Task <IQueryable <Organization> > _GetPermissionData(string accid, DataOperateEnum dataOp, bool withInActive = false)
        {
            var emptyQuery = Enumerable.Empty <Organization>().AsQueryable();
            var query      = emptyQuery;

            var currentAcc = await _DbContext.Accounts.FirstAsync(x => x.Id == accid);

            if (currentAcc == null)
            {
                return(query);
            }

            //数据状态
            if (withInActive)
            {
                query = _DbContext.Organizations;
            }
            else
            {
                query = _DbContext.Organizations.Where(x => x.ActiveFlag == AppConst.I_DataState_Active);
            }

            if (currentAcc.Type == AppConst.AccountType_SysAdmin)
            {
                //管理员不管理第一子层级以外的组织,自治权交给相关组织
                #region [U,D]
                if (dataOp == DataOperateEnum.Update || dataOp == DataOperateEnum.Delete)
                {
                    return(query.Where(x => string.IsNullOrEmpty(x.ParentId)));
                }
                #endregion

                #region [R]
                if (dataOp == DataOperateEnum.Retrieve)
                {
                    return(query);
                }
                #endregion
            }
            else
            {
                //品牌商,合伙人等组织管理员不能管理自身,但是可以管理第一子层级的组织,自治权还是交给相关组织
                #region [U,D]
                if (dataOp == DataOperateEnum.Update || dataOp == DataOperateEnum.Delete)
                {
                    return(query.Where(x => x.ParentId == currentAcc.OrganizationId));
                }
                #endregion

                #region [R]
                if (dataOp == DataOperateEnum.Retrieve)
                {
                    var ownOrganIdsQ = (await(_PermissionTreeRepository as PermissionTreeRepository).GetOrganManageNode(currentAcc.OrganizationId, new List <string>()
                    {
                        AppConst.S_NodeType_Organization
                    }, false)).Select(x => x.ObjId);
                    return(query.Where(x => ownOrganIdsQ.Contains(x.Id)));
                }
                #endregion
            }

            return(emptyQuery);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// 获取权限数据
        /// </summary>
        /// <param name="accid"></param>
        /// <param name="dataOp"></param>
        /// <param name="withInActive"></param>
        /// <returns></returns>
        public async override Task <IQueryable <AreaType> > _GetPermissionData(string accid, DataOperateEnum dataOp, bool withInActive = true)
        {
            IQueryable <AreaType> query;

            var currentAcc = await _DbContext.Accounts.Select(x => new Account()
            {
                Id = x.Id, OrganizationId = x.OrganizationId, Type = x.Type
            }).FirstOrDefaultAsync(x => x.Id == accid);

            //数据状态
            if (withInActive)
            {
                query = _DbContext.Set <AreaType>();
            }
            else
            {
                query = _DbContext.Set <AreaType>().Where(x => x.ActiveFlag == AppConst.I_DataState_Active);
            }

            //超级管理员系列不走权限判断
            if (currentAcc.Type == AppConst.AccountType_SysAdmin || currentAcc.Type == AppConst.AccountType_SysService)
            {
                return(await Task.FromResult(query));
            }


            if (dataOp == DataOperateEnum.Retrieve)
            {
                /*
                 * 读取操作
                 *      管理员
                 *              品牌管理员/用户:获取自己组织的创建的产品
                 *       合伙人/供应商
                 *              管理员/用户:获取自己组织有读取权限的
                 */
                var organNode = await _DbContext.PermissionTrees.FirstOrDefaultAsync(x => x.ObjId == currentAcc.OrganizationId);

                var organNodeQ = await _PermissionTreeRepository.GetAncestorNode(organNode, new List <string>() { AppConst.S_NodeType_Organization }, true);

                var organIds = organNodeQ.Select(x => x.ObjId).ToList();


                return(query.Where(x => organIds.Contains(x.OrganizationId)));
            }
            else
            {
                if (currentAcc.Type == AppConst.AccountType_BrandAdmin || currentAcc.Type == AppConst.AccountType_BrandMember)
                {
                    return(query.Where(x => x.OrganizationId == currentAcc.OrganizationId));
                }
            }

            return(query.Take(0));
        }
        /// <summary>
        /// 获取权限数据
        /// </summary>
        /// <param name="accid"></param>
        /// <param name="dataOp"></param>
        /// <param name="withInActive"></param>
        /// <returns></returns>
        public async override Task <IQueryable <Solution> > _GetPermissionData(string accid, DataOperateEnum dataOp, bool withInActive = true)
        {
            IQueryable <Solution> query;

            var currentAcc = await _DbContext.Accounts.Select(x => new Account()
            {
                Id = x.Id, OrganizationId = x.OrganizationId, Type = x.Type
            }).FirstOrDefaultAsync(x => x.Id == accid);

            //数据状态
            if (withInActive)
            {
                query = _DbContext.Set <Solution>();
            }
            else
            {
                query = _DbContext.Set <Solution>().Where(x => x.ActiveFlag == AppConst.I_DataState_Active);
            }

            //超级管理员系列不走权限判断
            if (currentAcc.Type == AppConst.AccountType_SysAdmin || currentAcc.Type == AppConst.AccountType_SysService)
            {
                return(await Task.FromResult(query));
            }


            if (dataOp == DataOperateEnum.Retrieve)
            {
                /*
                 * 读取操作
                 *      管理员
                 *              品牌管理员/用户:获取自己组织的创建的产品
                 *       合伙人/供应商
                 *              管理员/用户:获取自己组织有读取权限的
                 */


                if (currentAcc.Type == AppConst.AccountType_BrandAdmin || currentAcc.Type == AppConst.AccountType_BrandMember)
                {
                    return(query.Where(x => x.OrganizationId == currentAcc.OrganizationId));
                }
                else
                {
                    var permissionIdQ = _DbContext.ResourcePermissions.Where(x => x.OrganizationId == currentAcc.OrganizationId && x.ResType == ResType && x.OpRetrieve == 1);

                    query = from it in query
                            join ps in permissionIdQ on it.Id equals ps.ResId
                            select it;
                    return(query);
                }
            }
            else
            {
                /*
                 * 改,删操作
                 *      管理员:只获取自己组织创建的
                 *      普通用户:获取自己创建的
                 */

                if (currentAcc.Type == AppConst.AccountType_BrandAdmin || currentAcc.Type == AppConst.AccountType_PartnerAdmin || currentAcc.Type == AppConst.AccountType_SupplierAdmin)
                {
                    var permissionIdQ = _DbContext.ResourcePermissions.Where(x => x.OrganizationId == currentAcc.OrganizationId && x.ResType == ResType && x.OpRetrieve == 1);

                    query = from it in query
                            join ps in permissionIdQ on it.Id equals ps.ResId
                            select it;
                    return(query);
                }
            }

            //普通用户
            return(await Task.FromResult(query.Where(x => x.Creator == currentAcc.Id)));
        }
Ejemplo n.º 12
0
        public async override Task <IQueryable <ProductSpec> > _GetPermissionData(string accid, DataOperateEnum dataOp, bool withInActive = false)
        {
            var emptyQuery = Enumerable.Empty <ProductSpec>().AsQueryable();
            var query      = emptyQuery;

            var currentAcc = await _DbContext.Accounts.Select(x => new Account()
            {
                Id = x.Id, OrganizationId = x.OrganizationId, Type = x.Type
            }).FirstOrDefaultAsync(x => x.Id == accid);

            if (currentAcc == null)
            {
                return(query);
            }

            //数据状态
            if (withInActive)
            {
                query = _DbContext.Set <ProductSpec>();
            }
            else
            {
                query = _DbContext.Set <ProductSpec>().Where(x => x.ActiveFlag == AppConst.I_DataState_Active);
            }

            /*
             * 读取,修改,删除操作
             *      管理员:操作自己组织的创建的
             *      用户:操作自己创建的数据
             */


            if (currentAcc.Type == AppConst.AccountType_BrandAdmin || currentAcc.Type == AppConst.AccountType_BrandMember || currentAcc.Type == AppConst.AccountType_PartnerAdmin || currentAcc.Type == AppConst.AccountType_PartnerMember || currentAcc.Type == AppConst.AccountType_SupplierAdmin || currentAcc.Type == AppConst.AccountType_SupplierMember)
            {
                return(query.Where(x => x.OrganizationId == currentAcc.OrganizationId));
            }


            return(query.Where(x => x.Creator == accid));
        }