/// <summary> /// 是否具有创建BarThread的权限 /// </summary> /// <param name="authorizer"></param> /// <param name="sectionId">所属帖吧Id</param> /// <param name="errorMessage">无权信息提示</param> /// <returns></returns> public static bool BarThread_Create(this Authorizer authorizer, long sectionId, out string errorMessage) { errorMessage = string.Empty; IUser currentUser = UserContext.CurrentUser; if (currentUser == null) { errorMessage = "您需要先登录,才能发帖"; return false; } BarSectionService barSectionService = new BarSectionService(); var barSection = barSectionService.Get(sectionId); if (barSection == null) { errorMessage = "贴吧不存在"; return false; } if (authorizer.BarSection_Manage(barSection)) return true; if (!authorizer.AuthorizationService.Check(currentUser, PermissionItemKeys.Instance().Bar_CreateThread())) { if (currentUser.IsModerated) errorMessage = Resources.Resource.Description_ModeratedUser_CreateBarThreadDenied; return false; } if (barSection.TenantTypeId == TenantTypeIds.Instance().Bar()) { ISettingsManager<BarSettings> barSettingsManager = DIContainer.Resolve<ISettingsManager<BarSettings>>(); BarSettings barSetting = barSettingsManager.Get(); if (barSetting.OnlyFollowerCreateThread) { SubscribeService subscribeService = new SubscribeService(TenantTypeIds.Instance().BarSection()); if (subscribeService.IsSubscribed(sectionId, currentUser.UserId)) return true; else { errorMessage = "您需要先关注此帖吧,才能发帖"; return false; } } else return true; } else { if (authorizer.AuthorizationService.IsTenantMember(currentUser, barSection.TenantTypeId, barSection.SectionId)) return true; else { TenantType tenantType = new TenantTypeService().Get(barSection.TenantTypeId); errorMessage = string.Format("只有加入{0}才能发帖", tenantType.Name); return false; } } }
/// <summary> /// 是否具有创建BarPost的权限 /// </summary> /// <param name="sectionId">所属帖吧Id</param> /// <returns></returns> public static bool BarPost_Create(this Authorizer authorizer, long sectionId, out string errorMessage) { IUser currentUser = UserContext.CurrentUser; errorMessage = "没有权限回帖"; BarSectionService barSectionService = new BarSectionService(); var barSection = barSectionService.Get(sectionId); if (barSection == null) return false; if (barSection.AuditStatus != AuditStatus.Success) { errorMessage = "由于贴吧未经过审核,所以不允许发帖"; return false; } if (!authorizer.AuthorizationService.Check(currentUser, PermissionItemKeys.Instance().Bar_CreatePost())) { if (currentUser != null && currentUser.IsModerated) errorMessage = Resources.Resource.Description_ModeratedUser_CreateBarPostDenied; return false; } if (barSection.TenantTypeId == TenantTypeIds.Instance().Bar()) { //检查是否需要是关注用户才能发帖 ISettingsManager<BarSettings> barSettingsManager = DIContainer.Resolve<ISettingsManager<BarSettings>>(); BarSettings barSetting = barSettingsManager.Get(); if (barSetting.OnlyFollowerCreatePost) { if (currentUser == null) { errorMessage = "您需要先登录并关注此帖吧,才能回帖"; return false; } SubscribeService subscribeService = new SubscribeService(TenantTypeIds.Instance().BarSection()); bool isSubscribed = subscribeService.IsSubscribed(sectionId, currentUser.UserId); if (!isSubscribed) errorMessage = "您需要先关注此帖吧,才能回帖"; return isSubscribed; } } else { if (authorizer.BarSection_Manage(barSection)) return true; bool isTenantMember = authorizer.AuthorizationService.IsTenantMember(currentUser, barSection.TenantTypeId, barSection.SectionId); if (!isTenantMember) errorMessage = "您需要先加入,才能回帖"; return isTenantMember; } //站点设置是否启用了匿名发帖 ISettingsManager<SiteSettings> siteSettingsManager = DIContainer.Resolve<ISettingsManager<SiteSettings>>(); SiteSettings siteSettings = siteSettingsManager.Get(); if (siteSettings.EnableAnonymousPosting) return true; if (currentUser == null) { errorMessage = "您必须先登录,才能回帖"; return false; } return true; }
/// <summary> /// 是否具有评分的权限 /// </summary> /// <returns></returns> public static bool BarRating(this Authorizer authorizer, BarThread thread, out string errorMessage) { BarSettings barSettings = DIContainer.Resolve<ISettingsManager<BarSettings>>().Get(); errorMessage = "没有找到对应的帖子"; if (thread == null) return false; errorMessage = "您还没有登录"; IUser currentUser = UserContext.CurrentUser; if (currentUser == null) return false; if (thread.UserId == currentUser.UserId) { errorMessage = "您不可以给自己的帖子评分哦"; return false; } BarRatingService barRatingService = new BarRatingService(); //是否已经评过分 errorMessage = "您已经评论过此贴"; if (barRatingService.IsRated(currentUser.UserId, thread.ThreadId)) return false; errorMessage = "您的剩余积分不够了哦"; if (barRatingService.GetUserTodayRatingSum(UserContext.CurrentUser.UserId) + barSettings.ReputationPointsMinValue > barSettings.UserReputationPointsPerDay) return false; ISettingsManager<BarSettings> barSettingsManager = DIContainer.Resolve<ISettingsManager<BarSettings>>(); BarSettings barSetting = barSettingsManager.Get(); BarSectionService barSectionService = new BarSectionService(); var barSection = barSectionService.Get(thread.SectionId); if (barSection == null) return false; if (barSection.TenantTypeId == TenantTypeIds.Instance().Bar()) { errorMessage = "此帖吧仅允许关注的用户评分哦"; if (barSetting.OnlyFollowerCreatePost) { SubscribeService subscribeService = new SubscribeService(TenantTypeIds.Instance().BarSection()); return subscribeService.IsSubscribed(thread.SectionId, currentUser.UserId); } } else { if (authorizer.AuthorizationService.IsTenantMember(currentUser, barSection.TenantTypeId, barSection.SectionId)) return true; } errorMessage = "站点没有开启帖子评分"; if (!barSetting.EnableRating) return false; return true; }