66 lines
1.8 KiB
PHP
66 lines
1.8 KiB
PHP
<?php
|
||
|
||
namespace App\Models;
|
||
|
||
use Illuminate\Database\Eloquent\Model;
|
||
|
||
class OpePermission extends Model
|
||
{
|
||
// テーブル名
|
||
protected $table = 'ope_permission';
|
||
|
||
// 主キー
|
||
protected $primaryKey = 'id';
|
||
|
||
// created_at / updated_at を使用
|
||
public $timestamps = true;
|
||
|
||
// 一括代入許可カラム
|
||
protected $fillable = [
|
||
'municipality_id', // 自治体ID(外部キー)
|
||
'feature_id', // 機能ID(外部キー)
|
||
'permission_id', // 操作権限ID(外部キー)
|
||
];
|
||
|
||
/**
|
||
* 機能単位で権限を置換(自治体単位)
|
||
* ※ municipality_id + feature_id の組み合わせを置換する
|
||
*/
|
||
public static function replaceByFeature(
|
||
int $municipalityId,
|
||
int $featureId,
|
||
array $permissionIds
|
||
): void {
|
||
// ※既存削除
|
||
self::query()
|
||
->where('municipality_id', $municipalityId)
|
||
->where('feature_id', $featureId)
|
||
->delete();
|
||
|
||
// ※新規追加
|
||
$permissionIds = array_values(array_unique(array_map('intval', $permissionIds)));
|
||
foreach ($permissionIds as $pid) {
|
||
self::create([
|
||
'municipality_id' => $municipalityId,
|
||
'feature_id' => $featureId,
|
||
'permission_id' => $pid,
|
||
]);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 付与済み権限ID一覧を取得(自治体単位)
|
||
*/
|
||
public static function getPermissionIds(
|
||
int $municipalityId,
|
||
int $featureId
|
||
): array {
|
||
return self::query()
|
||
->where('municipality_id', $municipalityId)
|
||
->where('feature_id', $featureId)
|
||
->pluck('permission_id')
|
||
->map(fn ($v) => (int)$v)
|
||
->toArray();
|
||
}
|
||
}
|