更新
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace app\model;
|
||||
|
||||
use app\service\PermissionCatalog;
|
||||
use think\Model;
|
||||
|
||||
class Role extends Model
|
||||
{
|
||||
protected $name = 'roles';
|
||||
protected $autoWriteTimestamp = true;
|
||||
protected $createTime = 'created_at';
|
||||
protected $updateTime = 'updated_at';
|
||||
|
||||
public static function defaultPermissions(): array
|
||||
{
|
||||
return PermissionCatalog::emptyPermissions();
|
||||
}
|
||||
|
||||
public function getPermissionsAttr($value): array
|
||||
{
|
||||
return PermissionCatalog::normalize(self::toPermArray($value));
|
||||
}
|
||||
|
||||
public function setPermissionsAttr($value): string
|
||||
{
|
||||
return json_encode(
|
||||
PermissionCatalog::normalize(self::toPermArray($value)),
|
||||
JSON_UNESCAPED_UNICODE
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* ThinkPHP 8 会把 JSON 列转成 \think\model\type\Json,需调用 value() 取出数组。
|
||||
*/
|
||||
private static function toPermArray(mixed $value): array
|
||||
{
|
||||
if ($value === null || $value === '') {
|
||||
return [];
|
||||
}
|
||||
|
||||
if (is_array($value)) {
|
||||
return $value;
|
||||
}
|
||||
|
||||
if (is_object($value) && method_exists($value, 'value')) {
|
||||
$data = $value->value();
|
||||
return is_array($data) ? $data : [];
|
||||
}
|
||||
|
||||
if (is_string($value)) {
|
||||
$decoded = json_decode($value, true);
|
||||
return (json_last_error() === JSON_ERROR_NONE && is_array($decoded)) ? $decoded : [];
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user