懒得勤快 3 年之前
父节点
当前提交
b19e8a9abd

+ 11 - 1
src/Masuit.MyBlogs.Core/Controllers/BaseController.cs

@@ -272,12 +272,18 @@ namespace Masuit.MyBlogs.Core.Controllers
         protected Expression<Func<Post, bool>> PostBaseWhere()
         {
             Expression<Func<Post, bool>> where = _ => true;
+            if (CurrentUser.IsAdmin || Request.IsRobot())
+            {
+                return where;
+            }
+
+            where = where.And(p => p.LimitMode != RegionLimitMode.OnlyForSearchEngine);
             if (HideCategories.Length > 0)
             {
                 where = where.And(p => !HideCategories.Contains(p.CategoryId));
             }
 
-            if (CurrentUser.IsAdmin || VisitorTokenValid || Request.IsRobot())
+            if (VisitorTokenValid)
             {
                 return where;
             }
@@ -317,6 +323,10 @@ namespace Masuit.MyBlogs.Core.Controllers
 
             switch (post.LimitMode)
             {
+                case RegionLimitMode.OnlyForSearchEngine:
+                    Disallow(post);
+                    break;
+
                 case RegionLimitMode.AllowRegion:
                     if (!Regex.IsMatch(location, post.Regions))
                     {

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

@@ -281,10 +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 == 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.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)
@@ -292,6 +289,10 @@ namespace Masuit.MyBlogs.Core.Controllers
             var location = Request.Location() + "|" + Request.Headers[HeaderNames.Referer] + "|" + Request.Headers[HeaderNames.UserAgent];
             switch (post.LimitMode)
             {
+                case RegionLimitMode.OnlyForSearchEngine:
+                    Disallow(post);
+                    break;
+
                 case RegionLimitMode.AllowRegion:
                     if (!Regex.IsMatch(location, post.Regions) && !Request.IsRobot())
                     {

+ 3 - 3
src/Masuit.MyBlogs.Core/Masuit.MyBlogs.Core.csproj

@@ -48,7 +48,7 @@
         <PackageReference Include="CLRStats" Version="1.0.0" />
         <PackageReference Include="Collections.Pooled" Version="1.0.82" />
         <PackageReference Include="CSRedisCore" Version="3.8.2" />
-        <PackageReference Include="EFCoreSecondLevelCacheInterceptor" Version="3.5.0" />
+        <PackageReference Include="EFCoreSecondLevelCacheInterceptor" Version="3.5.1" />
         <PackageReference Include="Hangfire" Version="1.7.29" />
         <PackageReference Include="Hangfire.MemoryStorage" Version="1.7.0" />
         <PackageReference Include="htmldiff.net-core" Version="1.3.6" />
@@ -61,7 +61,7 @@
         <PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="6.0.5" />
         <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.5" />
         <PackageReference Include="Microsoft.Extensions.Http.Polly" Version="6.0.5" />
-        <PackageReference Include="Microsoft.Graph" Version="4.29.0" />
+        <PackageReference Include="Microsoft.Graph" Version="4.30.0" />
         <PackageReference Include="Microsoft.Graph.Auth" Version="1.0.0-preview.7" />
         <PackageReference Include="MiniProfiler.AspNetCore.Mvc" Version="4.2.22" />
         <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="6.0.4" />
@@ -72,7 +72,7 @@
         <PackageReference Include="System.Linq.Dynamic.Core" Version="1.2.18" />
         <PackageReference Include="TimeZoneConverter" Version="5.0.0" />
         <PackageReference Include="WilderMinds.RssSyndication" Version="1.7.0" />
-        <PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="6.13.21" />
+        <PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="6.14.0" />
     </ItemGroup>
     <ItemGroup>
         <Content Update="appsettings.json">

+ 10 - 2
src/Masuit.MyBlogs.Core/Models/Entity/Post.cs

@@ -243,7 +243,10 @@ namespace Masuit.MyBlogs.Core.Models.Entity
         AllowRegionExceptForbidRegion,
 
         [Description("不可见地区:{0},排除地区:{1}")]
-        ForbidRegionExceptAllowRegion
+        ForbidRegionExceptAllowRegion,
+
+        [Description("仅搜索引擎可见")]
+        OnlyForSearchEngine,
     }
 
     /// <summary>
@@ -271,6 +274,11 @@ namespace Masuit.MyBlogs.Core.Models.Entity
         /// <summary>
         /// 密码可见
         /// </summary>
-        Password
+        Password,
+
+        /// <summary>
+        /// 仅搜索引擎可见
+        /// </summary>
+        OnlyForSearchEngine,
     }
 }

+ 9 - 0
src/Masuit.MyBlogs.Core/Views/Post/ProtectContent.cshtml

@@ -42,6 +42,7 @@
             </div>
         }
     </div>
+    return;
 }
 @if (!string.IsNullOrEmpty(Model.ProtectContent)&&Model.ProtectContentMode==ProtectContentMode.CommentVisiable)
 {
@@ -55,6 +56,7 @@
             @Html.Raw(await Model.ProtectContent.ReplaceImgAttribute(Model.Title))
         }
     </div>
+    return;
 }
 @if (!string.IsNullOrEmpty(Model.ProtectContent)&&Model.ProtectContentMode==ProtectContentMode.Password)
 {
@@ -78,12 +80,19 @@
             @Html.Raw(await Model.ProtectContent.ReplaceImgAttribute(Model.Title))
         }
     </div>
+    return;
 }
 @if(Model.ProtectContentMode==ProtectContentMode.Regions) {
     if (Model.ProtectContentLimitMode==RegionLimitMode.AllowRegion&&Regex.IsMatch(Context.Request.Location(),Model.ProtectContentRegions)) {
         @Html.Raw(await Model.ProtectContent.ReplaceImgAttribute(Model.Title))
+        return;
     }
     if (Model.ProtectContentLimitMode==RegionLimitMode.ForbidRegion&&!Regex.IsMatch(Context.Request.Location(),Model.ProtectContentRegions)) {
         @Html.Raw(await Model.ProtectContent.ReplaceImgAttribute(Model.Title))
+        return;
     }
+}
+@if(Context.Request.IsRobot()&&Model.ProtectContentLimitMode==RegionLimitMode.OnlyForSearchEngine) {
+    @Html.Raw(await Model.ProtectContent.ReplaceImgAttribute(Model.Title))
+    return;
 }

+ 4 - 2
src/Masuit.MyBlogs.Core/wwwroot/ng-views/views/post/edit.html

@@ -23,6 +23,7 @@
                         <option ng-value="2">地区可见:</option>
                         <option ng-value="3">授权可见</option>
                         <option ng-value="4">密码可见</option>
+                        <option ng-value="5">仅搜索引擎可见</option>
                     </select>
                 </div>
                 <div class="input-group" ng-if="post.ProtectContentMode==2">
@@ -126,20 +127,21 @@
                     <optgroup label="可见性">
                         <option ng-value="1">指定地区可见</option>
                         <option ng-value="3">指定地区可见但排除在内的这些地区</option>
+                        <option ng-value="5">仅搜索引擎可见</option>
                     </optgroup>
                     <optgroup label="不可见性">
                         <option ng-value="2">指定地区不可见</option>
                         <option ng-value="4">指定地区不可见但排除在内的这些地区</option>
                     </optgroup>
                 </select>
-                <span class="input-group-btn" ng-if="(post.LimitMode||0)==0">
+                <span class="input-group-btn" ng-if="(post.LimitMode||0)==0||post.LimitMode==5">
                     <button type="button" class="btn btn-info waves-effect" ng-click="submit(post)">确认修改</button>
                 </span>
             </div>
         </div>
     </div>
     <div class="row">
-        <div class="col-md-6" ng-if="post.LimitMode>0">
+        <div class="col-md-6" ng-if="post.LimitMode>0 && post.LimitMode<5">
             <div class="input-group">
                 <span class="input-group-addon" ng-if="post.LimitMode%2==1">可见地区:</span>
                 <span class="input-group-addon" ng-if="post.LimitMode%2==0"><strong class="text-red">不可见地区:</strong></span>

+ 4 - 2
src/Masuit.MyBlogs.Core/wwwroot/ng-views/views/post/writeblog.html

@@ -25,6 +25,7 @@
                         <option ng-value="2">地区可见:</option>
                         <option ng-value="3">授权可见</option>
                         <option ng-value="4">密码可见</option>
+                        <option ng-value="5">仅搜索引擎可见</option>
                     </select>
                 </div>
                 <div class="input-group" ng-if="post.ProtectContentMode==2">
@@ -145,18 +146,19 @@
                     <optgroup label="可见性">
                         <option ng-value="1">指定地区可见</option>
                         <option ng-value="3">指定地区可见但排除在内的这些地区</option>
+                        <option ng-value="5">仅搜索引擎可见</option>
                     </optgroup>
                     <optgroup label="不可见性">
                         <option ng-value="2">指定地区不可见</option>
                         <option ng-value="4">指定地区不可见但排除在内的这些地区</option>
                     </optgroup>
                 </select>
-                <span class="input-group-btn" ng-if="(post.LimitMode||0)==0">
+                <span class="input-group-btn" ng-if="(post.LimitMode||0)==0||post.LimitMode==5">
                     <button class="btn btn-info" ng-click="submit(post)" type="button">发布</button>
                 </span>
             </div>
         </div>
-        <div class="col-md-5" ng-if="post.LimitMode>0">
+        <div class="col-md-5" ng-if="post.LimitMode>0 && post.LimitMode<5">
             <div class="input-group">
                 <span class="input-group-addon" ng-if="post.LimitMode%2==1">可见地区:</span>
                 <span class="input-group-addon" ng-if="post.LimitMode%2==0">