我在想,如何通过this包裹禁止人们......
所以我目前正在使用Laravel 5.1 ,我正试图从我的网站“禁止”用户。 我有一张名为'禁止'的桌子,它有以下结论:
+---------------+--------------+------------+-------------+------------------+----------------+--+
| TABLE_NAME | COLUMN_NAME | COLUMN_DEFAULT | IS_NULLABLE | DATA_TYPE | CHARACTER_MAXIMUM_LENGTH |
+---------------+--------------+------------+-------------+------------------+----------------+--+
| banned | id | NULL | NO | int | NULL |
| banned | user_id | NULL | NO | int | NULL |
| banned | banned_by | NULL | NO | int | NULL |
| banned | reason | NULL | NO | varchar | 255 |
| banned | expires | NULL | NO | datetime | NULL |
| banned | lifted | NULL | YES | datetime | NULL |
| banned | lifted_by | NULL | YES | int | NULL |
+---------------+--------------+------------+-------------+------------------+----------------+--+
我也有角色的标准结构(bican角色)。
现在,我希望能够使用“禁止”表格中的数据向我的被禁用用户显示自定义禁止视图。
最好的方法是什么?
答案 0 :(得分:0)
如果你添加一个新的中间件并在你的控制器中调用,用户可以访问该页面,它将检查它们是否被禁止
BannedMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class BannedMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!Auth::guest() && Auth::user()->is('banned')) {
return view('BannedPageView');
}
return $next($request);
}
}
并修改kernal.php
下的protected $routeMiddleware
添加此
'isBanned' => \App\Http\Middleware\BannedMiddleware::class,
然后在您的控制器中添加此
public function __construct()
{
$this->middleware('isBanned');
}
这将检查他们是否被禁止,因为他们击中了该控制器中的任何路线。
修改强>
为每个请求全局检查所有内容:
制作相同的中间件并放置此代码:
<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
use App\User;
use DB;
use Carbon\Carbon;
class CheckBanMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check()) {
if (User::CheckBan()) {
$bandata = DB::table('banned')->where('user_id', '=', Auth::id())->where('lifted', '=', Null)->where('expires', '>=', Carbon::now())->first();
return response()->view('banned', ['bandata' => $bandata]);
}
}
return $next($request);
}
}
在User.php
中,创建一个新功能:
public static function CheckBan()
{
return DB::table('banned')->where('user_id', '=', Auth::id())->where('lifted', '=', Null)->where('expires', '>=', Carbon::now())->exists();
}
这个功能是因为我有另一种存储禁令的方法......
将以下行添加到app/http/kernel.php
数组中的protected $middleware
。
\App\Http\Middleware\CheckBanMiddleware::class,
这提供了在每个请求之前检查数据。
你已经完成了!