用于检查两个不同守卫的 Auth 中间件的控制器构造函数
Controller constructor to check Auth middleware for two different guards
我有一个显示特定内容的仪表板视图,具体取决于正在查看的用户,无论是管理员还是普通用户。
我可以让我的管理员访问该页面,但由于我的中间件防护,普通用户目前无法访问。
class DashboardController extends Controller {
public function __construct()
{
$this->middleware('auth:admin');
}
public function index()
{
return view('dashboard.index');
}
}
以下代码检查每个 DashboardController 调用 auth:admins,但我希望普通用户也能访问它,有没有办法像这样检查 auth 中间件两次?
$this->middleware(['auth:admin','auth']);
因此理想情况下,它会检查您是管理员还是普通用户。
同样在我的视图页面上,当访问我正在使用的管理员的属性时:
{{ Auth::user()->admin_username }}
这正常吗?我有一个管理模型,但我仍然通过 Auth::user() 访问它,这对我来说感觉很奇怪,不应该是 Auth::admin()->admin_username
不同角色的用户访问特定页面更适合laravels gates和策略授权机制。
https://laravel.com/docs/5.5/authorization#writing-gates
这些允许您为您拥有的每个用例编写微调规则。简单的门可以定义为应用程序 AuthServiceProvider 中的闭包。例如:
public function boot()
{
$this->registerPolicies();
Gate::define('access-dashboard', function ($user, $post) {
return auth()->check() && (auth()->user()->hasRole('admin') || auth()->user()->hasRole('regular'));
});
}
然后您可以在任何需要的地方使用 gate facade,例如控制器方法或构造函数。
if (Gate::allows('access-dashboard', $model)) {
// The current user can access dashboard, load their data
}
或者直接在用户模型上使用 can
或 cant
助手。
if (auth()->user()->can('access-dashboard')) {
//
}
当然,你可以通过中间件实现类似的功能,使用上面的好处是你可以在代码的特定点授权操作以及可重用性。
最后一个问题,你写的是对的
{{ Auth::user()->admin_username }}
Auth::user()
或 auth()->user()
只是 returns 当前经过身份验证的用户,无论其角色如何。
没有 auth 中间件,策略将永远无法工作
我有一个显示特定内容的仪表板视图,具体取决于正在查看的用户,无论是管理员还是普通用户。
我可以让我的管理员访问该页面,但由于我的中间件防护,普通用户目前无法访问。
class DashboardController extends Controller {
public function __construct()
{
$this->middleware('auth:admin');
}
public function index()
{
return view('dashboard.index');
}
}
以下代码检查每个 DashboardController 调用 auth:admins,但我希望普通用户也能访问它,有没有办法像这样检查 auth 中间件两次?
$this->middleware(['auth:admin','auth']);
因此理想情况下,它会检查您是管理员还是普通用户。
同样在我的视图页面上,当访问我正在使用的管理员的属性时:
{{ Auth::user()->admin_username }}
这正常吗?我有一个管理模型,但我仍然通过 Auth::user() 访问它,这对我来说感觉很奇怪,不应该是 Auth::admin()->admin_username
不同角色的用户访问特定页面更适合laravels gates和策略授权机制。
https://laravel.com/docs/5.5/authorization#writing-gates
这些允许您为您拥有的每个用例编写微调规则。简单的门可以定义为应用程序 AuthServiceProvider 中的闭包。例如:
public function boot()
{
$this->registerPolicies();
Gate::define('access-dashboard', function ($user, $post) {
return auth()->check() && (auth()->user()->hasRole('admin') || auth()->user()->hasRole('regular'));
});
}
然后您可以在任何需要的地方使用 gate facade,例如控制器方法或构造函数。
if (Gate::allows('access-dashboard', $model)) {
// The current user can access dashboard, load their data
}
或者直接在用户模型上使用 can
或 cant
助手。
if (auth()->user()->can('access-dashboard')) {
//
}
当然,你可以通过中间件实现类似的功能,使用上面的好处是你可以在代码的特定点授权操作以及可重用性。
最后一个问题,你写的是对的
{{ Auth::user()->admin_username }}
Auth::user()
或 auth()->user()
只是 returns 当前经过身份验证的用户,无论其角色如何。
没有 auth 中间件,策略将永远无法工作