我正在尝试使草稿帖子仅对管理员可见。(当管理员访问帖子页面时,即使该帖子未发布,它也应显示该帖子)
我试图创建一个中间件:
public function handle($request, Closure $next)
{
$post = Post::findBySlugOrFail($request->slug);
if ($post->status == "draft") {
abort(404);
} elseif (auth()->check() && auth()->user()->hasAnyRole(['Administrator'])) {
return $next($request);
}
return $next($request);
}
我的status
表中有posts
列。
它总是显示找不到404
。
我做错了吗?
任何想法该怎么做?
答案 0 :(得分:1)
如果帖子是草稿,则if语句的第一部分始终为true,这就是为什么它在100%的时间内返回404的原因。永远不会检查用户是否是管理员。试试这个
public function handle($request, Closure $next)
{
$post = Post::findBySlugOrFail($request->slug);
if ($post->status == "draft" && auth()->check() && !auth()->user()->hasAnyRole(['Administrator']))) {
abort(404);
}
return $next($request);
}
这首先检查该帖子是否为草稿,如果不是,则显示下一个请求。如果是,它将检查用户是否已登录以及他们是否不是管理员。如果是这种情况,它将返回404。
答案 1 :(得分:1)
您只需要按正确的顺序做事
stplanr::line2points(iow_highways)
#> Simple feature collection with 2814 features and 1 field
#> geometry type: POINT
#> dimension: XY
#> bbox: xmin: 430780.7 ymin: 75702.05 xmax: 464851.7 ymax: 96103.72
#> epsg (SRID): 27700
#> proj4string: +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +units=m +no_defs
#> First 10 features:
#> id geometry
#> 1 1 POINT (464851.7 87789.73)
#> 2 1 POINT (464435.4 88250.85)
#> 3 2 POINT (464390.9 87412.27)
#> 4 2 POINT (464851.7 87789.73)
#> 5 3 POINT (462574.6 88987.62)
#> 6 3 POINT (462334.6 88709.92)
#> 7 4 POINT (464066.9 87576.84)
#> 8 4 POINT (464390.9 87412.27)
#> 9 5 POINT (464420 88227.79)
#> 10 5 POINT (464398.7 88225.33)
答案 2 :(得分:1)
您必须做的第一件事是检查用户状态,如果用户状态为管理员,发布状态为草稿,那么您必须返回中间件的下一个请求
public function handle($request, Closure $next)
{
$post = Post::findBySlugOrFail($request->slug);
// first you must check if the user is administrator and the post status is draft
if ($post->status == "draft" && !auth()->user()->hasAnyRole(['Administrator'])) {
abort(404);
} elseif (auth()->check() && auth()->user()->hasAnyRole(['Administrator'])) {
return $next($request);
}
return $next($request);
}