/// <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); }
/// <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); }
/// <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; }
//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); }
//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); }