php - 拉拉维尔 5.5 : Authorization with pivot table

标签 php mysql laravel laravel-5

我有四个表usersgroupspostsgroup_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/

相关文章:

php - 使用 Ajax 查询的 joomla 组件开发

php - 未找到 Laravel Lumen Memcached

php - laravel 在日期 from_date 和 to_date 之间

php - 协助访问 MySQL 的代码

php - 在单个函数中使用插入和更新

php - 错误 1064 (42000) 语法错误 - 哪里?

mysql - MySQL 会删除引用吗?

javascript - 确定 dropzone.js 中所有文件何时上传成功

ajax - Laravel 5 Ajax 发布

html - 检查 HTML 表单复选框等是否已 POST 设置的正确和最安全的方法是什么?