懒得勤快 3 years ago
parent
commit
2574356bda

+ 13 - 4
src/Masuit.MyBlogs.Core/Controllers/BaseController.cs

@@ -20,6 +20,7 @@ using Microsoft.Net.Http.Headers;
 using System.Linq.Expressions;
 using System.Net;
 using System.Text.RegularExpressions;
+using Masuit.MyBlogs.Core.Models.Enum;
 using SameSiteMode = Microsoft.AspNetCore.Http.SameSiteMode;
 
 namespace Masuit.MyBlogs.Core.Controllers
@@ -223,11 +224,17 @@ namespace Masuit.MyBlogs.Core.Controllers
 
         protected void CheckPermission(List<PostDto> posts)
         {
-            if (CurrentUser.IsAdmin || VisitorTokenValid || Request.IsRobot())
+            if (CurrentUser.IsAdmin || Request.IsRobot())
             {
                 return;
             }
 
+            if (VisitorTokenValid)
+            {
+                posts.RemoveAll(p => p.LimitMode == RegionLimitMode.OnlyForSearchEngine);
+                return;
+            }
+
             var location = Request.Location() + "|" + Request.Headers[HeaderNames.Referer] + "|" + Request.Headers[HeaderNames.UserAgent];
             if (Request.Cookies.TryGetValue(SessionKey.RawIP, out var rawip))
             {
@@ -242,6 +249,9 @@ namespace Masuit.MyBlogs.Core.Controllers
             {
                 switch (p.LimitMode)
                 {
+                    case RegionLimitMode.OnlyForSearchEngine:
+                        return true;
+
                     case RegionLimitMode.AllowRegion:
                         return !Regex.IsMatch(location, p.Regions);
 
@@ -271,13 +281,12 @@ namespace Masuit.MyBlogs.Core.Controllers
 
         protected Expression<Func<Post, bool>> PostBaseWhere()
         {
-            Expression<Func<Post, bool>> where = _ => true;
             if (CurrentUser.IsAdmin || Request.IsRobot())
             {
-                return where;
+                return _ => true;
             }
 
-            where = where.And(p => p.LimitMode != RegionLimitMode.OnlyForSearchEngine);
+            Expression<Func<Post, bool>> where = p => p.Status == Status.Published && p.LimitMode != RegionLimitMode.OnlyForSearchEngine;
             if (HideCategories.Length > 0)
             {
                 where = where.And(p => !HideCategories.Contains(p.CategoryId));

+ 10 - 12
src/Masuit.MyBlogs.Core/Controllers/HomeController.cs

@@ -58,7 +58,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         {
             var banners = AdsService.GetsByWeightedPrice(8, AdvertiseType.Banner, Request.Location()).OrderByRandom().ToList();
             var fastShares = await fastShareService.GetAllFromCacheAsync(s => s.Sort);
-            var postsQuery = PostService.GetQuery(PostBaseWhere().And(p => p.Status == Status.Published)); //准备文章的查询
+            var postsQuery = PostService.GetQuery(PostBaseWhere()); //准备文章的查询
             var posts = await postsQuery.Where(p => !p.IsFixedTop).OrderBy(OrderBy.ModifyDate.GetDisplay() + " desc").ToCachedPagedListAsync<Post, PostDto>(1, 15, MapperConfig);
             posts.Data.InsertRange(0, postsQuery.Where(p => p.IsFixedTop).OrderByDescending(p => p.ModifyDate).ProjectTo<PostDto>(MapperConfig).Cacheable().ToList());
             var viewModel = await GetIndexPageViewModel();
@@ -89,7 +89,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         {
             page = Math.Max(1, page);
             var viewModel = await GetIndexPageViewModel();
-            var postsQuery = PostService.GetQuery(PostBaseWhere().And(p => p.Status == Status.Published)); //准备文章的查询
+            var postsQuery = PostService.GetQuery(PostBaseWhere()); //准备文章的查询
             var h24 = DateTime.Today.AddDays(-1);
             var posts = orderBy switch
             {
@@ -131,7 +131,7 @@ namespace Masuit.MyBlogs.Core.Controllers
                 throw new NotFoundException("");
             }
 
-            var where = PostBaseWhere().And(p => p.Status == Status.Published);
+            var where = PostBaseWhere();
             var queryable = PostService.GetQuery(tag.Split(",", StringSplitOptions.RemoveEmptyEntries).Select(s => Regex.Escape(s.Trim())).Aggregate(where, (current, s) => current.And(p => Regex.IsMatch(p.Label, s))));
             var h24 = DateTime.Today.AddDays(-1);
             var posts = orderBy switch
@@ -173,11 +173,10 @@ namespace Masuit.MyBlogs.Core.Controllers
                 date = DateTime.Today;
             }
 
-            var where = PostBaseWhere().And(p => p.Status == Status.Published);
-            where = mode switch
+            var where = mode switch
             {
-                nameof(Models.Entity.Post.PostDate) => where.And(p => p.PostDate.Date == date),
-                _ => where.And(p => p.ModifyDate.Date == date),
+                nameof(Models.Entity.Post.PostDate) => PostBaseWhere().And(p => p.PostDate.Date == date),
+                _ => PostBaseWhere().And(p => p.ModifyDate.Date == date),
             };
             var queryable = PostService.GetQuery(where);
             var h24 = DateTime.Today.AddDays(-1);
@@ -212,8 +211,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         public async Task<ActionResult> Author(string author, [Optional] OrderBy? orderBy, int page = 1, [Range(1, 50, ErrorMessage = "页大小必须在0到50之间")] int size = 15)
         {
             page = Math.Max(1, page);
-            Expression<Func<Post, bool>> where = p => p.Author.Equals(author) || p.Modifier.Equals(author) || p.Email.Equals(author) || p.PostHistoryVersion.Any(v => v.Modifier.Equals(author) || v.ModifierEmail.Equals(author));
-            where = where.And(p => p.Status == Status.Published).And(PostBaseWhere());
+            Expression<Func<Post, bool>> where = PostBaseWhere().And(p => p.Author.Equals(author) || p.Modifier.Equals(author) || p.Email.Equals(author) || p.PostHistoryVersion.Any(v => v.Modifier.Equals(author) || v.ModifierEmail.Equals(author)));
             var h24 = DateTime.Today.AddDays(-1);
             var posts = orderBy switch
             {
@@ -252,8 +250,8 @@ namespace Masuit.MyBlogs.Core.Controllers
             var h24 = DateTime.Today.AddDays(-1);
             var posts = orderBy switch
             {
-                OrderBy.Trending => await PostService.GetQuery(PostBaseWhere().And(p => cids.Contains(p.CategoryId) && p.Status == Status.Published)).OrderByDescending(p => p.PostVisitRecordStats.Where(e => e.Date >= h24).Sum(e => e.Count)).ToCachedPagedListAsync<Post, PostDto>(page, size, MapperConfig),
-                _ => await PostService.GetQuery(PostBaseWhere().And(p => cids.Contains(p.CategoryId) && p.Status == Status.Published)).OrderBy($"{nameof(PostDto.IsFixedTop)} desc,{(orderBy ?? OrderBy.ModifyDate).GetDisplay()} desc").ToCachedPagedListAsync<Post, PostDto>(page, size, MapperConfig)
+                OrderBy.Trending => await PostService.GetQuery(PostBaseWhere().And(p => cids.Contains(p.CategoryId))).OrderByDescending(p => p.PostVisitRecordStats.Where(e => e.Date >= h24).Sum(e => e.Count)).ToCachedPagedListAsync<Post, PostDto>(page, size, MapperConfig),
+                _ => await PostService.GetQuery(PostBaseWhere().And(p => cids.Contains(p.CategoryId))).OrderBy($"{nameof(PostDto.IsFixedTop)} desc,{(orderBy ?? OrderBy.ModifyDate).GetDisplay()} desc").ToCachedPagedListAsync<Post, PostDto>(page, size, MapperConfig)
             };
             var viewModel = await GetIndexPageViewModel();
             viewModel.Posts = posts;
@@ -326,7 +324,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         /// <returns></returns>
         private async Task<HomePageViewModel> GetIndexPageViewModel()
         {
-            var postsQuery = PostService.GetQuery<PostDto>(PostBaseWhere().And(p => p.Status == Status.Published)); //准备文章的查询
+            var postsQuery = PostService.GetQuery<PostDto>(PostBaseWhere()); //准备文章的查询
             var notices = await NoticeService.GetPagesFromCacheAsync<DateTime, NoticeDto>(1, 5, n => n.NoticeStatus == NoticeStatus.Normal, n => n.ModifyDate, false); //加载前5条公告
             using var cats = CategoryService.GetQuery(c => c.Status == Status.Available && c.Post.Count > 0).Include(c => c.Parent).OrderBy(c => c.Name).ThenBy(c => c.Path).AsNoTracking().Cacheable().ToPooledList(); //加载分类目录
             var hotSearches = RedisHelper.Get<PooledList<KeywordsRank>>("SearchRank:Week").Take(10).ToPooledList(); //热词统计

+ 2 - 2
src/Masuit.MyBlogs.Core/Controllers/SeminarController.cs

@@ -48,8 +48,8 @@ namespace Masuit.MyBlogs.Core.Controllers
             var h24 = DateTime.Today.AddDays(-1);
             var posts = orderBy switch
             {
-                OrderBy.Trending => await PostService.GetQuery(PostBaseWhere().And(p => p.Seminar.Any(x => x.Id == id) && p.Status == Status.Published)).OrderByDescending(p => p.PostVisitRecordStats.Where(e => e.Date >= h24).Sum(e => e.Count)).ToCachedPagedListAsync<Post, PostDto>(page, size, MapperConfig),
-                _ => await PostService.GetQuery(PostBaseWhere().And(p => p.Seminar.Any(x => x.Id == id) && p.Status == Status.Published)).OrderBy($"{nameof(Post.IsFixedTop)} desc,{(orderBy ?? OrderBy.ModifyDate).GetDisplay()} desc").ToCachedPagedListAsync<Post, PostDto>(page, size, MapperConfig)
+                OrderBy.Trending => await PostService.GetQuery(PostBaseWhere().And(p => p.Seminar.Any(x => x.Id == id))).OrderByDescending(p => p.PostVisitRecordStats.Where(e => e.Date >= h24).Sum(e => e.Count)).ToCachedPagedListAsync<Post, PostDto>(page, size, MapperConfig),
+                _ => await PostService.GetQuery(PostBaseWhere().And(p => p.Seminar.Any(x => x.Id == id))).OrderBy($"{nameof(Post.IsFixedTop)} desc,{(orderBy ?? OrderBy.ModifyDate).GetDisplay()} desc").ToCachedPagedListAsync<Post, PostDto>(page, size, MapperConfig)
             };
             ViewBag.Id = s.Id;
             ViewBag.Title = s.Title;

+ 4 - 4
src/Masuit.MyBlogs.Core/Controllers/SubscribeController.cs

@@ -46,7 +46,7 @@ namespace Masuit.MyBlogs.Core.Controllers
             var time = DateTime.Today.AddDays(-1);
             string scheme = Request.Scheme;
             var host = Request.Host;
-            using var raw = PostService.GetQuery(PostBaseWhere().And(p => p.Rss && p.Status == Status.Published && p.ModifyDate >= time), p => p.ModifyDate, false).Include(p => p.Category).AsNoTracking().Cacheable().ToPooledList();
+            using var raw = PostService.GetQuery(PostBaseWhere().And(p => p.Rss && p.ModifyDate >= time), p => p.ModifyDate, false).Include(p => p.Category).AsNoTracking().Cacheable().ToPooledList();
             var data = await raw.SelectAsync(async p =>
             {
                 var summary = await p.Content.GetSummary(300, 50);
@@ -129,7 +129,7 @@ namespace Masuit.MyBlogs.Core.Controllers
             var host = Request.Host;
             var category = await categoryService.GetByIdAsync(id) ?? throw new NotFoundException("分类未找到");
             var cids = category.Flatten().Select(c => c.Id).ToArray();
-            using var raw = PostService.GetQuery(PostBaseWhere().And(p => p.Rss && cids.Contains(p.CategoryId) && p.Status == Status.Published && p.ModifyDate >= time), p => p.ModifyDate, false).Include(p => p.Category).AsNoTracking().Cacheable().ToPooledList();
+            using var raw = PostService.GetQuery(PostBaseWhere().And(p => p.Rss && cids.Contains(p.CategoryId) && p.ModifyDate >= time), p => p.ModifyDate, false).Include(p => p.Category).AsNoTracking().Cacheable().ToPooledList();
             var data = await raw.SelectAsync(async p =>
             {
                 var summary = await p.Content.GetSummary(300, 50);
@@ -186,7 +186,7 @@ namespace Masuit.MyBlogs.Core.Controllers
             string scheme = Request.Scheme;
             var host = Request.Host;
             var seminar = await seminarService.GetByIdAsync(id) ?? throw new NotFoundException("专题未找到");
-            using var raw = PostService.GetQuery(PostBaseWhere().And(p => p.Rss && p.Seminar.Any(s => s.Id == id) && p.Status == Status.Published && p.ModifyDate >= time), p => p.ModifyDate, false).Include(p => p.Category).AsNoTracking().Cacheable().ToPooledList();
+            using var raw = PostService.GetQuery(PostBaseWhere().And(p => p.Rss && p.Seminar.Any(s => s.Id == id) && p.ModifyDate >= time), p => p.ModifyDate, false).Include(p => p.Category).AsNoTracking().Cacheable().ToPooledList();
             var data = await raw.SelectAsync(async p =>
             {
                 var summary = await p.Content.GetSummary(300, 50);
@@ -281,7 +281,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         protected Expression<Func<Post, bool>> PostBaseWhere()
         {
             var location = Request.Location() + "|" + Request.Headers[HeaderNames.Referer] + "|" + Request.Headers[HeaderNames.UserAgent];
-            return p => p.LimitMode != RegionLimitMode.OnlyForSearchEngine && (p.LimitMode == null || p.LimitMode == RegionLimitMode.All ? true : p.LimitMode == RegionLimitMode.AllowRegion ? Regex.IsMatch(location, p.Regions) : p.LimitMode == RegionLimitMode.ForbidRegion ? !Regex.IsMatch(location, p.Regions) : p.LimitMode == RegionLimitMode.AllowRegionExceptForbidRegion ? Regex.IsMatch(location, p.Regions) && !Regex.IsMatch(location, p.ExceptRegions) : !Regex.IsMatch(location, p.Regions) || Regex.IsMatch(location, p.ExceptRegions));
+            return p => p.Status == Status.Published && p.LimitMode != RegionLimitMode.OnlyForSearchEngine && (p.LimitMode == null || p.LimitMode == RegionLimitMode.All ? true : p.LimitMode == RegionLimitMode.AllowRegion ? Regex.IsMatch(location, p.Regions) : p.LimitMode == RegionLimitMode.ForbidRegion ? !Regex.IsMatch(location, p.Regions) : p.LimitMode == RegionLimitMode.AllowRegionExceptForbidRegion ? Regex.IsMatch(location, p.Regions) && !Regex.IsMatch(location, p.ExceptRegions) : !Regex.IsMatch(location, p.Regions) || Regex.IsMatch(location, p.ExceptRegions));
         }
 
         private void CheckPermission(Post post)

+ 2 - 1
src/Masuit.MyBlogs.Core/wwwroot/Assets/UEditor/ueditor.config.admin.js

@@ -19,7 +19,8 @@
 	 * 因此,UEditor提供了针对不同页面的编辑器可单独配置的根路径,具体来说,在需要实例化编辑器的页面最顶部写上如下代码即可。当然,需要令此处的URL等于对应的配置。
 	 * window.UEDITOR_HOME_URL = "/xxxx/xxxx/";
 	 */
-	var URL = window.UEDITOR_HOME_URL || getUEBasePath();
+	//var URL = window.UEDITOR_HOME_URL || getUEBasePath();
+	var URL = "/Assets/UEditor/";
 
 	/**
 	 * 配置项主体。注意,此处所有涉及到路径的配置别遗漏URL变量。

+ 2 - 1
src/Masuit.MyBlogs.Core/wwwroot/Assets/UEditor/ueditor.config.front.js

@@ -19,7 +19,8 @@
      * 因此,UEditor提供了针对不同页面的编辑器可单独配置的根路径,具体来说,在需要实例化编辑器的页面最顶部写上如下代码即可。当然,需要令此处的URL等于对应的配置。
      * window.UEDITOR_HOME_URL = "/xxxx/xxxx/";
      */
-    var URL = window.UEDITOR_HOME_URL || getUEBasePath();
+    //var URL = window.UEDITOR_HOME_URL || getUEBasePath();
+	var URL = "/Assets/UEditor/";
 
     /**
      * 配置项主体。注意,此处所有涉及到路径的配置别遗漏URL变量。

+ 1 - 3
src/Masuit.MyBlogs.Core/wwwroot/ng-views/controllers/post.js

@@ -384,9 +384,7 @@ myApp.controller("writeblog", ["$scope", "$http", "$timeout","$location", functi
     $scope.post.Email = $scope.user.Email;
     var refer = $location.search()['refer'];
     if (refer) {
-        $scope.request("/post/get", {
-            id: refer
-        }, function (data) {
+        $scope.get("/post/get/"+refer, function (data) {
             $scope.post = data.Data;
             delete $scope.post.Id;
             $scope.keywordsDropdown.update({data: ($scope.post.Keyword||"").split(',')});