【发布时间】:2022-09-26 16:51:30
【问题描述】:
我正在使用政策并希望确保我不会向其他用户显示数据。 在每个表中,我都有列 \'user_id\' 并检查当前登录用户的 id 是否与数据和他的 user_id 相同。 在这种特定情况下,我有一个 Objects 和 Objektverwaltung 表,其中 objekt_id 作为外键给出。
我想使用我的策略来确保只有给定对象的数据显示在 objektverwaltung 中,其中给出了外键 \'objekt_id\'。
带有 show 方法的 ObjektVerwaltung 控制器:
public function show($objektvwId) {
$objektId = ObjektVerwaltung::with(\'Objekt\')->find($objektvwId);
$this->authorize(\'view\', $objektId);
$objekte = ObjektVerwaltung::where(\'objekt_id\',$objektvwId)->get();
return view(\'objekte.verwaltung\', compact(\'objekte\'));
}
政策:
public function view(User $user, ObjektVerwaltung $objektVerwaltung)
{
return $objektVerwaltung->user_id === $user->id;
}
楷模:
class ObjektVerwaltung extends Model
{
use HasFactory;
protected $table = \'objekte_verwaltungens\';
protected $fillable = [\'user_id\',\'objekt_id\',\'key\', \'value\'];
public function Objekt() {
return $this->belongsTo(Objekt::class);
}
}
class Objekt extends Model
{
use HasFactory;
protected $table = \'objekts\';
protected $fillable = [\'name\',\'strasse\', \'hausnummer\', \'plz\', \'ort\', \'user_id\'];
public function Mieter() {
return $this->hasMany(Mieter::class);
}
public function Company() {
return $this->belongTo(Company::class);
}
public function Objektverwaltung() {
return $this->hasMany(ObjektVerwaltung::class);
}
}
我了解到我可以轻松地使用 find() 作为模型验证数据的方法。但在这种特定情况下,我必须检查 objekt_id(objektverwaltung 中的外键)而不是 ID,因此我不能使用 find()。但是,如果我使用 where 或其他方法,我将无法使用我的策略并且总是未经授权。
我尝试在模型上使用 with 方法,但也许有更好的方法来解决我的问题。我坚信。
谢谢!
这可能是解决方案,但我总是“未经授权”并且没有得到政策:$objekt= ObjektVerwaltung::where(\'objekt_id\', $objektId)->get(); $this->authorize(\'view\', $objekt);
-
你能添加模型类吗?
-
在我的文本中添加
-
您的控制器令人困惑。这
$objektId = ObjektVerwaltung::with(\'Objekt\')->find($objektvwId);返回$objektVerwaltung,但变量名为$objektId。$objekte = ObjektVerwaltung::where(\'objekt_id\',$objektvwId)->get();也一样。您正在使用objekt_id获取ObjektVerwaltung,它不会返回任何内容。请先看看这些问题。我相信您的政策已得到正确执行。只是没有从数据库中正确获取数据。 -
您好,变量 $objektvwId 是 ObjektVerwaltung 中列 objekt_id 的 ID。我不想 find() ObjektVerwaltung 中的 id。我想在 ObjektVerwaltung 中找到 objekt_id。我试图找到一个解决方案,如何通过该政策在这里解决它。检查 objekt_id 和 f.e. user_id 对数据是正确的
-
这可能是解决方案,但我总是“未经授权”并且没有得到政策:
$objekt= ObjektVerwaltung::where(\'objekt_id\', $objektId)->get(); $this->authorize(\'view\', $objekt);