2 回答
TA贡献1810条经验 获得超4个赞
在您的 User 模型中,如果您还没有将角色设置为关系,您可以执行以下操作:
public function roles()
{
return $this->belongsToMany('App\Role');
}
public function hasRole($roleName) : bool
{
// you could always change this function so it could take
// an array of role IDs instead of the name
$roles = $this->roles()->where('name', roleName)->firstOrFail();
if ($roles) {
return true;
}
return false;
}
在您的呼叫中心模型中,您可以设置如下功能:
public function canBeViewedBy(User $user) : bool
{
// customise role name to whichever roles you want
if ($user->hasRole('canViewAllCentres') {
return true;
}
// you can add additional custom logic here
return false;
}
然后在您的 Dashboard 控制器中的函数中:
if (!$call_center->canBeViewedBy(Auth::user()) {
return abort(403, 'Forbidden');
}
TA贡献1776条经验 获得超12个赞
首先,停止在 URL 中传递数据。如果可能,请在用户登录时使用会话来处理此问题。
如果您不喜欢上述方法,那么您可以为此使用加密/解密。永远不要在 URL 中传递像 22 或 33 这样的原始数字。不要让最终用户感到好奇。
use Illuminate\Support\Facades\Crypt;
$encrypted = Crypt::encryptString('123');
$decrypted = Crypt::decryptString($encrypted);
此外,您可以阅读 Laravel 授权文档,它对您面临的确切问题很有用。
- 2 回答
- 0 关注
- 159 浏览
添加回答
举报
