ori*_*yan 5 php testing laravel laravel-5
我正在为 Laravel 应用程序编写测试。在我的 中,我根据数据库中的权限表AuthServiceProvider->boot()定义了许多用户能力。$gate->define()
基本上是这样的:
foreach ($this->getPermissions() as $permission) {
$gate->define($permission->name, function ($user) use ($permission) {
return $user->hasPermission($permission->name);
});
}
Run Code Online (Sandbox Code Playgroud)
在我的测试中,我正在动态创建权限,但AuthServiceProvider已经启动,这意味着我无法使用@can、Gate等验证用户权限。
有没有正确的方法来处理这个问题?
你可以在里面做这样的事情AuthServiceProvider
首先导入必要的包
use Illuminate\Auth\Access\Gate;
use Illuminate\Contracts\Auth\Access\Gate as GateContract;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
Run Code Online (Sandbox Code Playgroud)
然后添加这个boot()方法
public function boot(GateContract $gate)
{
parent::registerPolicies($gate);
$gate->define('update-post', function ($user, $post, $isModerator) {
// check if user id equals post user id or whatever
if ($user->id === $post->user->id) {
return true;
}
// you can define multiple ifs
if ($user->id === $category->user_id) {
return true;
}
if ($isModerator) {
return true;
}
return false;
});
// you can also define multiple gates
$gate->define('update-sub', function($user, $subreddit) {
if($user->id === $subreddit->user->id) {
return true;
}
return false;
});
Run Code Online (Sandbox Code Playgroud)
然后在你的控制器中你可以做这样的事情
if (Gate::denies('update-post', [$post, $isModerator])) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4159 次 |
| 最近记录: |