【发布时间】:2018-07-23 13:33:41
【问题描述】:
在我的 Laravel 应用程序中,我有几个有效的策略,但一个不起作用。
控制器
public function store(Project $project, CreateActionRequest $request)
{
$this->authorize('store', $project);
Action::create([
'name' => $request->name,
]);
return redirect()->route('projects.show', $project->id)->withSuccess('Massnahme erfolgreich gespeichert');
}
政策
namespace App\Policies\Project;
use App\Models\Project\Project;
use App\Models\User;
use App\Models\Project\Action;
use Illuminate\Auth\Access\HandlesAuthorization;
class ActionPolicy
{
use HandlesAuthorization;
public function store(User $user, Project $project)
{
return $user->company_id === $project->company_id;
}
}
AuthServiceProvider
protected $policies = [
'App\Models\User' => 'App\Policies\CompanyAdmin\UserPolicy',
'App\Models\Company' => 'App\Policies\CompanyAdmin\CompanyPolicy',
'App\Models\Team' => 'App\Policies\CompanyAdmin\TeamPolicy',
'App\Models\Department' => 'App\Policies\CompanyAdmin\DepartmentPolicy',
'App\Models\Location' => 'App\Policies\CompanyAdmin\LocationPolicy',
'App\Models\Division' => 'App\Policies\CompanyAdmin\DivisionPolicy',
'App\Models\Costcenter' => 'App\Policies\CompanyAdmin\CostcenterPolicy',
'App\Models\Workplace' => 'App\Policies\CompanyAdmin\WorkplacePolicy',
'App\Models\Product' => 'App\Policies\CompanyAdmin\ProductPolicy',
'App\Models\Project\Action' => 'App\Policies\Project\ActionPolicy',
'App\Models\Project\Project' => 'App\Policies\Project\ProjectPolicy',
];
创建动作请求
namespace App\Http\Requests\Project;
use Illuminate\Foundation\Http\FormRequest;
class CreateActionRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|min:3',
];
}
}
除 ActionPolicy 和 ProjectPolicy 外,所有策略均有效。 我在策略中添加了一个 __construct() 方法来检查是否调用了策略。但是 ActionPolicy 和 ProjectPolicy 不起作用。 我如何搜索错误?我尝试使用 dd() 但我始终只收到消息:此操作未经授权
【问题讨论】:
-
向我们展示来自
CreateActionRequest的代码 -
您的
CreateActionRequest看起来不错,即使您没有在内部使用Action Policy,因为您正在返回true,就好像用户总是被授权一样,所以问题不在于您的CreateActionRequest,您需要在某些pastebin上发布来自laravel.log的错误堆栈跟踪,然后使用链接更新您的问题 -
@NikolaGavric:laravel.log 中没有关于此错误的消息。
-
问题不在于您的
CreateActionRequest也不在于您的Action Policy从我所看到的,您能否确认您发送的name属性在您的@987654336 中至少包含3 个字母@并确认这是您获得unauthorized的方法? -
如果我禁用
$this->authorize('store', $project);,则输入将毫无问题地存储。表单中的字段:pastebin.com/raw/2kyD40Qn