laravel 5.2 中的单个 table 中的两个用户身份验证
two users auth in a single table in laravel 5.2
我正在尝试使用 laravel 框架构建一个在线商店网站
我有一个 table 包含这些列:id, username, password, division_id
其中 division_id
指的是一个名为 division
的 table,其中:id, division_type
我有两个 division type
:Admin
和 Customers
我正在尝试根据他们的 division_id
来划分访问一定数量页面的权限,例如管理员可以访问管理面板但不能访问客户,客户可以访问客户面板,例如产品订单页面但不是管理员。
这两种类型都可以在它们的可访问页面中完成几乎所有事情,我的主要页面将有一个管理面板、一个客户面板和主要网站。
如何在我的项目中只使用一个 table 和中间件组来做到这一点?
P.S。我是这个论坛的新手
对于这个中间件,您只需要检查查看站点所需的 division
是否与用户所属的 division
相同。在 handle
函数中,您可以传递代表部门名称的第三个参数,例如 customer
当您将中间件添加到您的路由时,您可以将部门名称作为参数传递给 handle
函数,如下所示:
'middleware' => ['division:customer']
在 Route Group
中实现它可能看起来像这样:
Route::group(['prefix' => 'customer', 'middleware' => ['division:customer']], funtion(){
//route definitions for all these routes will require a "division" type of "customer"
});
或者您可以将其应用于 RESTful
路由的路由资源:
Route::resource('customer', 'CustomerController')->middleware(['divison:customer']);
或者您可以将其应用于特定路线:
Route::get('customer/{id}', 'CustomerController@show')->middleware(['division:customer']);
在您的 handle
函数中,您可以访问该值作为第三个参数:
public function handle($request, Closure $next, Division $division)
为了使通过主键以外的东西自动解析依赖关系的过程变得简单,我们将继续弹出我们的 App\Providers\RouteServiceProvider
并在 boot
函数中添加一些魔法.
public function boot(Router $router)
{
parent::boot($router);
$router->bind('division', function($value) {
return Division::where(function($query) use($value){
if (is_int($value)) {
return $query->where('id', $value)->first();
} else {
return $query->where('type', ucfirst($value))->first();
}
return null;
});
});
现在,回到中间件,我们可以轻松地与 handle
函数中的 $division
和我们的 authorized
用户进行比较。
if(app()->user()->division->type == $division->type) {
return $next($request);
}
abort(403, 'You are not authorized to view this page!');
我正在尝试使用 laravel 框架构建一个在线商店网站
我有一个 table 包含这些列:id, username, password, division_id
其中 division_id
指的是一个名为 division
的 table,其中:id, division_type
我有两个 division type
:Admin
和 Customers
我正在尝试根据他们的 division_id
来划分访问一定数量页面的权限,例如管理员可以访问管理面板但不能访问客户,客户可以访问客户面板,例如产品订单页面但不是管理员。
这两种类型都可以在它们的可访问页面中完成几乎所有事情,我的主要页面将有一个管理面板、一个客户面板和主要网站。
如何在我的项目中只使用一个 table 和中间件组来做到这一点?
P.S。我是这个论坛的新手
对于这个中间件,您只需要检查查看站点所需的 division
是否与用户所属的 division
相同。在 handle
函数中,您可以传递代表部门名称的第三个参数,例如 customer
当您将中间件添加到您的路由时,您可以将部门名称作为参数传递给 handle
函数,如下所示:
'middleware' => ['division:customer']
在 Route Group
中实现它可能看起来像这样:
Route::group(['prefix' => 'customer', 'middleware' => ['division:customer']], funtion(){
//route definitions for all these routes will require a "division" type of "customer"
});
或者您可以将其应用于 RESTful
路由的路由资源:
Route::resource('customer', 'CustomerController')->middleware(['divison:customer']);
或者您可以将其应用于特定路线:
Route::get('customer/{id}', 'CustomerController@show')->middleware(['division:customer']);
在您的 handle
函数中,您可以访问该值作为第三个参数:
public function handle($request, Closure $next, Division $division)
为了使通过主键以外的东西自动解析依赖关系的过程变得简单,我们将继续弹出我们的 App\Providers\RouteServiceProvider
并在 boot
函数中添加一些魔法.
public function boot(Router $router)
{
parent::boot($router);
$router->bind('division', function($value) {
return Division::where(function($query) use($value){
if (is_int($value)) {
return $query->where('id', $value)->first();
} else {
return $query->where('type', ucfirst($value))->first();
}
return null;
});
});
现在,回到中间件,我们可以轻松地与 handle
函数中的 $division
和我们的 authorized
用户进行比较。
if(app()->user()->division->type == $division->type) {
return $next($request);
}
abort(403, 'You are not authorized to view this page!');