我有四个表users
、groups
、posts
和group_user
。用户可以关注不同的群组。 group_user 表
用于多对多关系。
每个帖子都属于一个组和一个用户。我希望用户只有关注该群组才能在该群组上发布帖子。我可以使用 if
语句轻松检查用户是否关注该组。但是我如何授权用户使用策略发帖。
最佳答案
创建策略:php artisan make:policy
。
注册政策:
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
Post::class => PostPolicy::class,
];
在您的策略中,逻辑例如:
public function create(User $user, Post $post)
{
$groupsOfUser = $user->groups()->get();
foreach ($groupsOfUser as $group) {
if($group->id == request('groupId'))return true;
}
}
在你的 Controller 中:
public function store(Post $post, $groupId)
{
$this->authorize('create', $post);
Post::create([
'user_id' =>auth()->id(),
'group_id' => $groupId,
'title' => 'sometitle',
]);
}
我已经用路线测试了它:
Route::get('/post/{groupId}', 'PostController@store');
但是您可能会通过输入获取 groupId,但您明白了。
关于php - 拉拉维尔 5.5 : Authorization with pivot table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47709791/