我有一个“users”表,它与“page_access_management”表保持一对一的关系。该表包括“emp_create”、“view”、“delete”、“edit”等字段,我将它们的值设置为 1 或 0。我正在使用 Passport 身份验证并将用户的详细信息存储在会话中,但我没有在会话中存储“page_access_management”详细信息。我有一个创建员工的链接:
<a class="nav-link {{ Route::currentRouteName() === 'employee.create' ? 'active' : '' }}" href="{{ route('employee.create') }}">Add Employee</a>
如果用户无权创建员工,我希望隐藏此链接。
protected function checkPermission($permissionName)
{
$user_session = session('user');
$userId = $user_session->id;
$hasPermission = User::whereHas('pageAccessManagements', function ($query) use ($userId, $permissionName) {
$query->where('user_id', $userId)->where($permissionName, 1);
})->exists();
return $hasPermission;
}
我想用这个功能来防止未经授权的用户访问路由。
使用刀片文件中的
checkPermission
函数可根据用户的权限有条件地显示链接。
@if(checkPermission('emp_create'))
<a class="nav-link {{ Route::currentRouteName() === 'employee.create' ? 'active' : '' }}" href="{{ route('employee.create') }}">Add Employee</a>
@endif