gpt4 book ai didi

mysql - 群组中的 UserMiddleware 问题

转载 作者:行者123 更新时间:2023-11-29 22:04:45 26 4
gpt4 key购买 nike

我正在制作一个 Laravel 5.1 应用程序,用户可以在其中创建一个群组并通过邀请码邀请成员加入该群组。我已经能够为所有者制作中间件,但我在 UserMiddleware 方面遇到问题。

此中间件的目的是确保只有用户只能冲浪到他们所属的组。

这是我目前拥有的代码:

我的数据库关系:

// User.php

// User that creates the group, is owner of this group (seperate middleware)
public function ownedGroups()
{
return $this->hasMany('App\Group', 'owner');
}
// Users can be member of more then one group
public function groups()
{
return $this->belongsToMany('App\Group');
}

// Group.php

//Owner connection in group
public function owner()
{
return $this->belongsTo('App\User');
}
// Users are member of this group
public function users()
{
return $this->belongsToMany('App\User');
}

我的迁移:

    Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('username')->unique();
$table->string('email')->unique();
$table->string('password', 60);
$table->string('avatar');
$table->string('name');
$table->string('lastname');
$table->string('country');
$table->string('vocation');
$table->string('twitter');
$table->string('facebook');
$table->rememberToken();
$table->timestamps();
});

Schema::create('groups', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
// User id gets set as an owner (user that creates the group)
$table->integer('owner');
$table->string('shortdesc');
$table->string('longdesc');
$table->string('groupimage');
$table->string('invitecode');
$table->string('slug')->unique();
$table->timestamps();
});

// Pivot table to connect the two tables
Schema::create('group_user', function(Blueprint $table)
{
$table->integer('group_id')->unsigned()->index();
$table->foreign('group_id')->references('id')->on('groups')->onDelete('cascade');

$table->integer('user_id')->unsigned()->index();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

$table->timestamps();
});

我的路线:

# Group
$router->get('groups', ['as' => 'group', 'uses' => 'GroupController@index']);
$router->get('groups/create', ['as' => 'group.create', 'uses' => 'GroupController@create']);
$router->get('groups/{slug}', ['as' => 'group.show', 'uses' => 'GroupController@show']);
$router->post('groups', ['as' => 'group.store', 'uses' => 'GroupController@store']);
$router->post('groups/join', ['as' => 'group.join', 'uses' => 'GroupController@joinGroup']);
$router->patch('groups/{slug}', ['as' => 'group.updateInvite', 'uses' => 'GroupController@updateInviteCode']);

我的Owner中间件:例如,我将ownermiddleware 添加到“updateInviteCode”函数中。

public function handle($request, Closure $next)
{
$group = Group::whereSlug($request->slug)->first();
$owner = $group->owner;
if ($owner !== Auth::id())
{
return redirect('groups');
}

return $next($request);
}
}

我现在的目的是制作一个用户中间件,这样只有成员才能进入他们的特定群组,而不能冲浪到他们不属于的群组。

目前,我有一个查询提供特定组中用户的集合,但如何将登录的用户与集合中给出的项目进行比较?我想应该有某种循环,但我不知道如何继续。

public function handle($request, Closure $next)
{
$group = Group::whereSlug($request->slug)->first();
$user->whereHas('groups', function($query) use ($group) {
$query->where('id', '=', $group->id);
})->get();
if ($user !== Auth::id())
{
return redirect('groups');
}

return $next($request);
}
}

任何帮助将不胜感激!

谢谢

最佳答案

我昨天自己找到了解决方案:

public function handle($request, Closure $next)
{
$group = Group::whereSlug($request->group->slug)->first();

foreach ($group->users as $user)
{
if($user->id == Auth::id())
{
return $next($request);
}
}

\Flash::error('You are not a user of this group!');
return redirect('groups');
}

关于mysql - 群组中的 UserMiddleware 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32266825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com