51 lines
1.1 KiB
Dart
51 lines
1.1 KiB
Dart
class Account {
|
|
const Account({
|
|
required this.id,
|
|
required this.username,
|
|
required this.isAdmin,
|
|
required this.permissions,
|
|
});
|
|
|
|
final String id;
|
|
final String username;
|
|
final bool isAdmin;
|
|
final Map<String, dynamic> permissions;
|
|
|
|
bool get canReadSupport => isAdmin || _supportFlag('read');
|
|
|
|
bool get canWriteSupport => isAdmin || _supportFlag('write');
|
|
|
|
bool _supportFlag(String key) {
|
|
final support = permissions['support'];
|
|
if (support is Map) {
|
|
return support[key] == true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
factory Account.fromJson(Map<String, dynamic> json) {
|
|
return Account(
|
|
id: json['id']?.toString() ?? '',
|
|
username: json['username'] as String? ?? '',
|
|
isAdmin: json['isAdmin'] == true,
|
|
permissions: _stringKeyMap(json['permissions']),
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'id': id,
|
|
'username': username,
|
|
'isAdmin': isAdmin,
|
|
'permissions': permissions,
|
|
};
|
|
}
|
|
}
|
|
|
|
Map<String, dynamic> _stringKeyMap(Object? value) {
|
|
if (value is! Map) {
|
|
return {};
|
|
}
|
|
return value.map((key, item) => MapEntry(key.toString(), item));
|
|
}
|