/// <summary> /// 是否具有创建BarSection的权限 /// </summary> /// <returns></returns> public static bool BarSection_Create(this Authorizer authorizer) { IUser currentUser = UserContext.CurrentUser; if (currentUser == null) { return(false); } if (authorizer.IsAdministrator(BarConfig.Instance().ApplicationId)) { return(true); } IBarSettingsManager barSettingsManager = DIContainer.Resolve <IBarSettingsManager>(); BarSettings barSetting = barSettingsManager.Get(); if (!barSetting.EnableUserCreateSection) { return(false); } if (currentUser.Rank < barSetting.UserRankOfCreateSection) { return(false); } return(true); }
/// <summary> /// 评分 /// </summary> /// <param name="entity"></param> /// <returns></returns> public override object Insert(Spacebuilder.Bar.BarRating entity) { //1.先检查用户今日大于零的评分总和是否超出限制; //2.对主题帖作者加威望 ISettingsManager <BarSettings> barSettingsManager = DIContainer.Resolve <ISettingsManager <BarSettings> >(); BarSettings barSettings = barSettingsManager.Get(); bool result = false; var sql = Sql.Builder; sql.Select("sum(ReputationPoints)") .From("spb_BarRatings") .Where("UserId=@0", entity.UserId) .Where("DateCreated>@0", new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day)) .Where("ReputationPoints>0"); long?sumReputationPoints = CreateDAO().FirstOrDefault <long?>(sql); if (!sumReputationPoints.HasValue || sumReputationPoints.Value <= barSettings.UserReputationPointsPerDay) { base.Insert(entity); result = true; } return(result); }
/// <summary> /// 数据库中的对象转换为EditModel /// </summary> /// <returns></returns> public static BarPostEditModel AsEditModel(this BarPost post) { BarSettings barSettings = DIContainer.Resolve <ISettingsManager <BarSettings> >().Get(); BarThread thread = new BarThreadService().Get(post.ThreadId); return(new BarPostEditModel { Body = post.GetBody(), ParentId = post.ParentId, PostId = post.PostId, Subject = thread.Subject, ThreadId = post.ThreadId, SectionId = post.SectionId }); }
/// <summary> /// 转换为EditModel /// </summary> /// <param name="settings"></param> /// <returns>EditModel</returns> public static SectionSettingsEditModel AsEditModel(this BarSettings settings) { return(new SectionSettingsEditModel { EnableRating = settings.EnableRating, EnableUserCreateSection = settings.EnableUserCreateSection, OnlyFollowerCreateThread = settings.OnlyFollowerCreateThread, ReputationPointsMaxValue = settings.ReputationPointsMaxValue, ReputationPointsMinValue = settings.ReputationPointsMinValue, UserRankOfCreateSection = settings.UserRankOfCreateSection, ThreadSubjectMaxLength = settings.ThreadSubjectMaxLength, ThreadBodyMaxLength = settings.ThreadBodyMaxLength, PostBodyMaxLength = settings.PostBodyMaxLength, UserReputationPointsPerDay = settings.UserReputationPointsPerDay }); }
/// <summary> /// 是否具有评分的权限 /// </summary> /// <returns></returns> public static bool BarRating(this Authorizer authorizer, BarThread thread, out string errorMessage) { BarSettings barSettings = DIContainer.Resolve <IBarSettingsManager>().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); } IBarSettingsManager barSettingsManager = DIContainer.Resolve <IBarSettingsManager>(); 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); }
/// <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()) { //检查是否需要是关注用户才能发帖 IBarSettingsManager barSettingsManager = DIContainer.Resolve <IBarSettingsManager>(); 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); } //站点设置是否启用了匿名发帖 ISiteSettingsManager siteSettingsManager = DIContainer.Resolve <ISiteSettingsManager>(); SiteSettings siteSettings = siteSettingsManager.Get(); if (siteSettings.EnableAnonymousPosting) { return(true); } if (currentUser == null) { errorMessage = "您必须先登录,才能回帖"; return(false); } return(true); }
/// <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()) { IBarSettingsManager barSettingsManager = DIContainer.Resolve <IBarSettingsManager>(); 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); } } }