我的用户有user
组和admin
角色。
我想要的是什么:
同一网址的不同控制器操作。我认为以下情况会很好,但这不起作用。
目前,当我以管理员身份登录时,我得到一个例外,我不允许查看该页面。
routes/web.php
Route::group( [
'middleware' => [ 'auth', \App\Http\Middleware\UserLastActivity::class ],
'domain' => parse_url( env( 'APP_URL' ), PHP_URL_HOST )
], function () {
Route::group( [
'middleware' => [ \App\Http\Middleware\Admin::class ]
], function () {
Route::get('/', 'AdminController@index')->name('home');
} );
Route::group( [
'middleware' => [ \App\Http\Middleware\User::class ]
], function () {
Route::get( '/', 'CvController@index' )->name( 'home' );
} );
} );
Http/Middleware/User.php
<?php
namespace App\Http\Middleware;
use Closure;
class User {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
*
* @return mixed
*/
public function handle( $request, Closure $next ) {
if ( \Auth::user()->role->id === \App\User::ROLE_USER ) {
return $next( $request );
}
abort( 401 );
}
}
Http/Middleware/Admin.php
<?php
namespace App\Http\Middleware;
use Closure;
class Admin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ( \Auth::user()->role->id === \App\User::ROLE_ADMIN ) {
return $next( $request );
}
abort( 401, __('messages.http.unauthorized') );
}
}
关于如何实现这一目标的任何想法?
要明确:
当用户有role_id 1(管理员)时,路由/
应该执行AdminController@index
当用户有role_id 2(用户)时:路由/
应该执行CvController@index
答案 0 :(得分:0)
我认为最好的方法是重新考虑您的路线,因为如果您想遵循标准,这不是好的设计。当请愿不同时(post,get,put等),您可以使用不同的控制器使用相同的URL。
根据控制器内部的用户角色,您是否无法完成必须完成的操作的逻辑?例如:
Route::get('/', 'UserController@index');
然后在UserController的索引中 - &gt;
public function index()
{
if (Auth::user()->role->id == 1) :
//do X
else :
//do y
endif;
}