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 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 json) { return Account( id: json['id']?.toString() ?? '', username: json['username'] as String? ?? '', isAdmin: json['isAdmin'] == true, permissions: _stringKeyMap(json['permissions']), ); } Map toJson() { return { 'id': id, 'username': username, 'isAdmin': isAdmin, 'permissions': permissions, }; } } Map _stringKeyMap(Object? value) { if (value is! Map) { return {}; } return value.map((key, item) => MapEntry(key.toString(), item)); }