作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个 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/
我正在制作一个 Laravel 5.1 应用程序,用户可以在其中创建一个群组并通过邀请码邀请成员加入该群组。我已经能够为所有者制作中间件,但我在 UserMiddleware 方面遇到问题。 此中间件
我是一名优秀的程序员,十分优秀!