【发布时间】:2023-01-12 03:38:35
【问题描述】:
我有一个Server。我需要禁止编辑 Server 给那些没有创建它的用户。但是有个问题,Server可能有很多Users可以编辑。我把它放在一个单独的数据库表 ServerUserCreate 中,其中存储了 server_id 和 user_id。
它不适合我。由于Server表中没有user_id列,因为很多用户可以推荐
Gate::define('server-edit', function (User $user, Server $server) {
return $user->id === $server->user_id;
});
我不知何故需要比较
ServerUserCreates->server_id === $server->id || Auth::user()->id === ServerUserCreate->user_id
如果它们相等,则访问是开放的。但我完全不知道如何在Gate中做到这一点
ServerUserCreate表
Schema::create('server_user_creates', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->id();
$table->unsignedBigInteger('server_id');
$table->unsignedBigInteger('user_id');
$table->index('server_id', 'suc_server_idx');
$table->index('user_id', 'suc_user_idx');
$table->foreign('server_id', 'suc_server_fk')->on('servers')->references('id');
$table->foreign('user_id', 'suc_user_fk')->on('users')->references('id');
$table->timestamps();
});
【问题讨论】: