我有一个多级会员网站,需要在Laravel 5.5的web.php文件中保护我的路线。
我的用户表上有一个名为role_id
的列。
在role_id
中是以下值
我试图用简单的IF语句
来做if (Auth::user()->role_id != '2'):
return view('home');
else:
//ADMIN ROUTES
Route::get('/admin','AdminController@index')->name('admin');
endif;
if (Auth::user()->role_id != '1'):
return view('home');
else:
//OWNER ROUTES
Route::get('/admin','OwnerController@index')->name('owner');
endif;
ETC....
但是获取错误尝试获取非对象的属性。也许不是最好的方法。
所以我读到了这样做的MIDDLEWARE :(看起来好多了)
Route::group(['middleware' => ['auth', 'admin']], function() {
// put all your admin routes here
});
Route::group(['middleware' => ['auth', 'owner']], function() {
// put all your owner user routes here
});
但它没有解释如何添加中间件。 我是否必须为每个组创建5个不同的中间件文件,类似于我找到的文件:
use Illuminate\Contracts\Auth\Guard;
class Admin
{
protected $auth;
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
public function handle($request, Closure $next)
{
if($this->auth->user()->role_id != '2') {
return redirect()->view('home');
}
return $next($request);
}
}
有人能伸出援助之手并解释如何编写正确的中间件来实现这一目标吗?
答案 0 :(得分:0)
错误尝试获取非对象的属性。如果用户尚未登录,则可以找到。
在你检查之前
if(Auth :: user() - > role_id!=' 2'):
你应该确保用户使用
登录Auth :: check()
...第一
答案 1 :(得分:0)
就像这个例子:
// Setup the number of the concurrent operations
TransferManager.Configurations.ParallelOperations = 64;
// Setup the transfer context and track the upoload progress
SingleTransferContext context = new SingleTransferContext();
context.ProgressHandler = new Progress<TransferStatus>((progress) =>
{
Console.WriteLine("Bytes uploaded: {0}", progress.BytesTransferred);
});
// Upload a local blob
var task = TransferManager.UploadAsync(
sourcePath, destBlob, null, context, CancellationToken.None);
task.Wait();
答案 2 :(得分:0)
web.php
Route::group(['middleware' => ['auth', 'admin']], function() {
Route::get('/admin/dashboard', function(){
return view('admin.dashboard');
});
});
into protected $routeMiddleware of Kernel.php
'admin' => \App\Http\Middleware\AdminMiddleware::class,
AdminMiddleware.php
$user = Auth::user();
if($user->role == 'admin'){
return $next($request);
} else
// abort(403, 'Wrong Accept Header');
return new Response(view('notauthorized')->with('role', 'admin'));
}
admin, moderators, owner, banned_user will be value of user_type/role column of user table.
or you can use user_type_id or role_id instead of user_type_name or role_type
别忘了添加
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Response;
位于
下方use Closure;
您的中间件
您也可以使用Gate之类的其他方式来做到这一点,如果需要,请告诉我。 :)