/// <summary>
        /// 更新内容隐私设置
        /// </summary>
        /// <param name="privacyable">可隐私接口</param>
        /// <param name="specifyObjects"><remarks>key=specifyObjectTypeId,value=内容指定对象集合</remarks></param>
        public void UpdatePrivacySettings(IPrivacyable privacyable, Dictionary <int, IEnumerable <ContentPrivacySpecifyObject> > specifyObjects)
        {
            //回复:已修改
            var sql = Sql.Builder;
            //List<ContentPrivacySpecifyObject> userPrivacySpecifyObjects;
            //IEnumerable<ContentPrivacySpecifyObject> pairs;
            //IEnumerable<ContentPrivacySpecifyObject> deletePairs;
            //IEnumerable<ContentPrivacySpecifyObject> insertPairs;

            Database dao = CreateDAO();

            dao.OpenSharedConnection();

            sql.Append("delete from tn_ContentPrivacySpecifyObjects")
            .Where("ContentId = @0", privacyable.ContentId)
            .Where("TenantTypeId = @0", privacyable.TenantTypeId);
            dao.Execute(sql);

            if (specifyObjects == null)
            {
                specifyObjects = new Dictionary <int, IEnumerable <ContentPrivacySpecifyObject> >();
            }

            foreach (var item in specifyObjects)
            {
                //sql = Sql.Builder;
                //done:zhangp,by zhengw:SpecifyObjectId=>SpecifyObjectTypeId
                //回复:已修改


                foreach (var insertPair in item.Value)
                {
                    dao.Insert(insertPair);
                }

                //sql.Select("*")
                //   .From("tn_ContentPrivacySpecifyObjects")
                //   .Where("ContentId = @0", privacyable.ContentId)
                //   .Where("TenantTypeId = @0", privacyable.TenantTypeId)
                //   .Where("SpecifyObjectTypeId = @0", item.Key);

                //userPrivacySpecifyObjects = dao.Fetch<ContentPrivacySpecifyObject>(sql);

                //done:zhangp,by zhengw:userPrivacySpecifyObjects.Count为0时就不更新了?我觉得可以把这个判断去掉,两个边界情况都可以使用求交集的办法
                //回复:已修改

                //pairs = userPrivacySpecifyObjects.Intersect(item.Value);
                //deletePairs = userPrivacySpecifyObjects.Except(pairs);
                //foreach (var deletePair in deletePairs)
                //    dao.Delete(deletePair);
                //insertPairs = item.Value.Except(pairs);
                //foreach (var insertPair in insertPairs)
                //    dao.Insert(insertPair);
            }

            dao.CloseSharedConnection();
            RealTimeCacheHelper.IncreaseAreaVersion("TenantTypeId", privacyable.TenantTypeId);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 内容隐私验证
        /// </summary>
        /// <param name="privacyable">可隐私接口</param>
        /// <param name="toUserId">被验证用户Id</param>
        /// <returns>true-验证通过,false-验证失败</returns>
        public bool Validate(IPrivacyable privacyable, long toUserId)
        {
            if (privacyable.PrivacyStatus == PrivacyStatus.Public)
            {
                return(true);
            }
            if (privacyable.PrivacyStatus == PrivacyStatus.Private)
            {
                return(false);
            }

            if (toUserId == privacyable.UserId)
            {
                return(true);
            }

            //被验证用户为超级管理员
            IUserService userService = DIContainer.Resolve <IUserService>();
            IUser        toUser      = userService.GetUser(toUserId);

            if (toUser.IsInRoles(RoleNames.Instance().SuperAdministrator()))
            {
                return(true);
            }

            //被验证用户为黑名单用户
            PrivacyService privacyService = new PrivacyService();

            if (privacyService.IsStopedUser(privacyable.UserId, toUserId))
            {
                return(false);
            }

            //判断指定对象可见
            Dictionary <int, IEnumerable <ContentPrivacySpecifyObject> > dictionary = GetPrivacySpecifyObjects(privacyable.TenantTypeId, privacyable.ContentId);

            if (dictionary == null || dictionary.Count() == 0)
            {
                return(false);
            }
            foreach (var pair in dictionary)
            {
                IPrivacySpecifyObjectValidator privacySpecifyUserGetter = DIContainer.ResolveNamed <IPrivacySpecifyObjectValidator>(pair.Key.ToString());
                foreach (var specifyObject in pair.Value)
                {
                    if (privacySpecifyUserGetter.Validate(privacyable.UserId, toUserId, specifyObject.SpecifyObjectId))
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 内容隐私验证
        /// </summary>        
        /// <param name="privacyable">可隐私接口</param>
        /// <param name="toUserId">被验证用户Id</param>
        /// <returns>true-验证通过,false-验证失败</returns>
        public bool Validate(IPrivacyable privacyable, long toUserId)
        {
            if (privacyable.PrivacyStatus == PrivacyStatus.Public)
                return true;
            if (privacyable.PrivacyStatus == PrivacyStatus.Private)
                return false;

            if (toUserId == privacyable.UserId)
                return true;

            //被验证用户为超级管理员
            IUserService userService = DIContainer.Resolve<IUserService>();
            IUser toUser = userService.GetUser(toUserId);
            if (toUser.IsSuperAdministrator())
                return true;

            //被验证用户为黑名单用户
            PrivacyService privacyService = new PrivacyService();
            if (privacyService.IsStopedUser(privacyable.UserId, toUserId))
                return false;

            //判断指定对象可见
            Dictionary<int, IEnumerable<ContentPrivacySpecifyObject>> dictionary = GetPrivacySpecifyObjects(privacyable.TenantTypeId, privacyable.ContentId);
            if (dictionary == null || dictionary.Count() == 0)
                return false;
            foreach (var pair in dictionary)
            {
                IPrivacySpecifyObjectValidator privacySpecifyUserGetter = DIContainer.ResolveNamed<IPrivacySpecifyObjectValidator>(pair.Key.ToString());
                foreach (var specifyObject in pair.Value)
                {
                    if (privacySpecifyUserGetter.Validate(privacyable.UserId, toUserId, specifyObject.SpecifyObjectId))
                        return true;
                }
            }
            return false;
        }
Exemplo n.º 4
0
 //done:zhengw,by mazq  已经是一个独立类了,就不要加Content了
 //zhengw回复:已修改
 /// <summary>
 /// 更新内容隐私设置
 /// </summary>
 /// <param name="privacyable">可隐私接口</param>
 /// <param name="specifyObjects"><remarks>key=specifyObjectTypeId,value=内容指定对象集合</remarks></param>
 public void UpdatePrivacySettings(IPrivacyable privacyable, Dictionary<int, IEnumerable<ContentPrivacySpecifyObject>> specifyObjects)
 {
     //更新指定对象集合时,将旧数据集合不在新集合中的数据删除,将新集合中的数据不在旧集合中的插入;
     contentPrivacySpecifyObjectsRepository.UpdatePrivacySettings(privacyable, specifyObjects);
 }
Exemplo n.º 5
0
 //done:zhengw,by mazq  已经是一个独立类了,就不要加Content了
 //zhengw回复:已修改
 /// <summary>
 /// 更新内容隐私设置
 /// </summary>
 /// <param name="privacyable">可隐私接口</param>
 /// <param name="specifyObjects"><remarks>key=specifyObjectTypeId,value=内容指定对象集合</remarks></param>
 public void UpdatePrivacySettings(IPrivacyable privacyable, Dictionary <int, IEnumerable <ContentPrivacySpecifyObject> > specifyObjects)
 {
     //更新指定对象集合时,将旧数据集合不在新集合中的数据删除,将新集合中的数据不在旧集合中的插入;
     contentPrivacySpecifyObjectsRepository.UpdatePrivacySettings(privacyable, specifyObjects);
 }