我的資料庫中有這張表。? 角色,內容為 0,0,0,0,0,0
在此表中,我存盤用戶權限。例如,如果他是管理員,它可以是 0,0,0,0,0,1 或者如果他同時是主持人和管理員,它可以是 0,0,0,1,0,1。
但我不知道如何在分離的查詢中顯示它們。
管理員僅查詢串列 0,0,0,0,0,0 中的最后一個引數的示例。
因此,對于它,我必須在查詢中進行爆炸,但我不知道該怎么做。
我嘗試了類似的方法,看看我是否可以在查詢執行之前獲取表并分解它。
$query = User::where(
function($results) {
dd($results);
foreach($results as $result) {
print($result);
}
})->first();
有人知道我該怎么做嗎?
uj5u.com熱心網友回復:
如果你有一個固定的模式,你可以很容易地“爆炸”它。
例如:
$result = "0,0,0,0,0,1"; // your data in for is string so:
$permission = explode(",",$result); // convert to an array.
// 輸出是:
print ($permission);
[0, 0, 0, 0, 0, 1];
print ($permission[5]);
// 輸出為:
1
現在您可以訪問陣列的每個單元格。
但它不是一個明確的方法來制作權限和角色。我建議您使用具有不同關系的不同表。
uj5u.com熱心網友回復:
我認為這不是實作角色和權限的便捷方式。如果您正在使用 Laravel,那么已經有一種方法可以以門和策略的形式實作權限。或者你可以通過像Spatie Package這樣的包來實作它
uj5u.com熱心網友回復:
這可能有助于它回傳以 1 結尾的權限
User::where(function ($builder){
$builder->where('permission', 'regex','%1');
});
uj5u.com熱心網友回復:
作為一個簡單而適當的解決方案,您還可以撰寫您的, where 條件如下
->whereRaw("SUBSTRING_INDEX(SUBSTRING_INDEX(permission_column_name, ',', 6), ',', -1) = 1")
正如您在上面的代碼中看到的,使用SUBSTRING_INDEX(permission_column_name, ',', 6)函式,我們將能夠提取列中以逗號分隔的第六個值之前的所有內容。
因為 SUBSTRING_INDEX() 函式還允許我們使用負值來提取從右邊開始計數的欄位,所以我們使用這種能力提取包含字串最后一個值的最右邊的欄位-1。
使用上述相同的方法,您還可以在列中給定的逗號分隔字串中根據需要找到任何位置可用的任何值。
uj5u.com熱心網友回復:
假設每個用戶都有一個角色,你可以在User模型中添加一些方法來處理權限。
Class User extends Authenticatable {
private function getPermissions(): array {
return explode(',', $this->role)
}
public function isAdministrator(): bool {
$permissions = $this->getPermissions();
return $permissions[5] == 1;
}
public function isModerator(): bool {
$permissions = $this->getPermissions();
return $permissions[3] == 1;
}
}
現在您可以在代碼中使用它。像這樣:
$user = auth()->user() // Or User::find($id) ...
if ($user->isAdministrator() || $user->isModerator()) {
// Do something
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/391959.html
標籤:拉拉维尔
