Add more logging

Use better way to serialize user permissions
This commit is contained in:
2023-09-01 14:56:34 +08:00
parent 75859e7055
commit 239d1675af
8 changed files with 57 additions and 30 deletions

View File

@@ -5,7 +5,7 @@ part 'token.g.dart';
@JsonSerializable()
class Token {
const Token ({
const Token({
required this.id,
required this.uid,
required this.token,
@@ -39,7 +39,9 @@ class TokenWithUserInfo {
final String name;
@JsonKey(name: 'is_admin')
final bool isAdmin;
final UserPermission permissions;
factory TokenWithUserInfo.fromJson(Map<String, dynamic> json) => _$TokenWithUserInfoFromJson(json);
@JsonKey(fromJson: UserPermissions.fromJson, toJson: UserPermissions.toJson2)
final UserPermissions permissions;
factory TokenWithUserInfo.fromJson(Map<String, dynamic> json) =>
_$TokenWithUserInfoFromJson(json);
Map<String, dynamic> toJson() => _$TokenWithUserInfoToJson(this);
}

View File

@@ -29,7 +29,7 @@ TokenWithUserInfo _$TokenWithUserInfoFromJson(Map<String, dynamic> json) =>
token: Token.fromJson(json['token'] as Map<String, dynamic>),
name: json['name'] as String,
isAdmin: json['is_admin'] as bool,
permissions: $enumDecode(_$UserPermissionEnumMap, json['permissions']),
permissions: UserPermissions.fromJson(json['permissions'] as int),
);
Map<String, dynamic> _$TokenWithUserInfoToJson(TokenWithUserInfo instance) =>
@@ -37,12 +37,5 @@ Map<String, dynamic> _$TokenWithUserInfoToJson(TokenWithUserInfo instance) =>
'token': instance.token,
'name': instance.name,
'is_admin': instance.isAdmin,
'permissions': _$UserPermissionEnumMap[instance.permissions]!,
'permissions': UserPermissions.toJson2(instance.permissions),
};
const _$UserPermissionEnumMap = {
UserPermission.none: 0,
UserPermission.readGallery: 1,
UserPermission.editGallery: 2,
UserPermission.all: 3,
};

View File

@@ -1,16 +1,35 @@
import 'package:enum_flag/enum_flag.dart';
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonEnum(valueField: 'code')
enum UserPermission {
none(0),
readGallery(1),
editGallery(2),
all(3);
enum UserPermission with EnumFlag {
readGallery,
editGallery,
}
const UserPermission(this.code);
const userPermissionAll = 3;
class UserPermissions {
const UserPermissions(this.code);
final int code;
bool has(UserPermission permission) => code.hasFlag(permission);
int toJson() => code;
static int toJson2(UserPermissions code) {
return code.code;
}
static fromJson(int code) {
return UserPermissions(code);
}
@override
String toString() {
if (code & userPermissionAll != 0) return "all";
final set = code.getFlags(UserPermission.values).toSet();
if (set.isEmpty) return "none";
return set.map((e) => e.name).join("|");
}
}
@JsonSerializable()
@@ -25,7 +44,8 @@ class BUser {
final String username;
@JsonKey(name: 'is_admin')
final bool isAdmin;
final UserPermission permissions;
@JsonKey(fromJson: UserPermissions.fromJson, toJson: UserPermissions.toJson2)
final UserPermissions permissions;
factory BUser.fromJson(Map<String, dynamic> json) => _$BUserFromJson(json);
Map<String, dynamic> toJson() => _$BUserToJson(this);
}

View File

@@ -10,19 +10,12 @@ BUser _$BUserFromJson(Map<String, dynamic> json) => BUser(
id: json['id'] as int,
username: json['username'] as String,
isAdmin: json['is_admin'] as bool,
permissions: $enumDecode(_$UserPermissionEnumMap, json['permissions']),
permissions: UserPermissions.fromJson(json['permissions'] as int),
);
Map<String, dynamic> _$BUserToJson(BUser instance) => <String, dynamic>{
'id': instance.id,
'username': instance.username,
'is_admin': instance.isAdmin,
'permissions': _$UserPermissionEnumMap[instance.permissions]!,
'permissions': UserPermissions.toJson2(instance.permissions),
};
const _$UserPermissionEnumMap = {
UserPermission.none: 0,
UserPermission.readGallery: 1,
UserPermission.editGallery: 2,
UserPermission.all: 3,
};