mirror of
https://github.com/rustdesk/rustdesk.git
synced 2025-06-07 18:02:48 +08:00
ab share rules, use user/group name rather than level (#7443)
Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
parent
0540e2cf6c
commit
4e060203ad
@ -238,17 +238,6 @@ enum ShareRule {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum ShareLevel {
|
|
||||||
user(1),
|
|
||||||
group(2),
|
|
||||||
team(3);
|
|
||||||
|
|
||||||
const ShareLevel(this.value);
|
|
||||||
final int value;
|
|
||||||
|
|
||||||
static String teamName = translate('Everyone');
|
|
||||||
}
|
|
||||||
|
|
||||||
class AbProfile {
|
class AbProfile {
|
||||||
String guid;
|
String guid;
|
||||||
String name;
|
String name;
|
||||||
@ -279,17 +268,39 @@ class AbTag {
|
|||||||
|
|
||||||
class AbRulePayload {
|
class AbRulePayload {
|
||||||
String guid;
|
String guid;
|
||||||
int level;
|
String? user;
|
||||||
String name;
|
|
||||||
int rule;
|
|
||||||
String? group;
|
String? group;
|
||||||
|
int rule;
|
||||||
|
|
||||||
AbRulePayload(this.guid, this.level, this.name, this.rule, {this.group});
|
AbRulePayload(
|
||||||
|
this.guid,
|
||||||
|
this.user,
|
||||||
|
this.group,
|
||||||
|
this.rule,
|
||||||
|
);
|
||||||
|
|
||||||
AbRulePayload.fromJson(Map<String, dynamic> json)
|
AbRulePayload.fromJson(Map<String, dynamic> json)
|
||||||
: guid = json['guid'] ?? '',
|
: guid = json['guid'] ?? '',
|
||||||
level = json['level'] ?? 0,
|
user = json['user'],
|
||||||
name = json['name'] ?? '',
|
group = json['group'],
|
||||||
rule = json['rule'] ?? 0,
|
rule = json['rule'] ?? 0;
|
||||||
group = json['group'];
|
|
||||||
|
static String buildName(String? user, String? group) {
|
||||||
|
if (user != null && group != null) {
|
||||||
|
return '-';
|
||||||
|
}
|
||||||
|
if (user != null) {
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
if (group != null) {
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
return teamName;
|
||||||
|
}
|
||||||
|
|
||||||
|
String getName() {
|
||||||
|
return buildName(user, group);
|
||||||
|
}
|
||||||
|
|
||||||
|
static String teamName = translate('Everyone');
|
||||||
}
|
}
|
||||||
|
@ -1029,13 +1029,12 @@ class __RuleTreeState extends State<_RuleTree> {
|
|||||||
if (!match(user)) {
|
if (!match(user)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
final userRuleIndex = rules.indexWhere(
|
final userRuleIndex = rules.indexWhere((e) => e.user == user);
|
||||||
(e) => e.level == ShareLevel.user.value && e.name == user);
|
|
||||||
if (userRuleIndex < 0) {
|
if (userRuleIndex < 0) {
|
||||||
if (!onlyShowExisting) {
|
if (!onlyShowExisting) {
|
||||||
userNodes.add(TreeNode(
|
userNodes.add(TreeNode(
|
||||||
content: _buildEmptyNodeContent(
|
content:
|
||||||
ShareLevel.user, user, totalWidth, indent * 2),
|
_buildEmptyNodeContent(user, null, totalWidth, indent * 2),
|
||||||
key: ValueKey(keyIndex++),
|
key: ValueKey(keyIndex++),
|
||||||
children: []));
|
children: []));
|
||||||
}
|
}
|
||||||
@ -1052,8 +1051,7 @@ class __RuleTreeState extends State<_RuleTree> {
|
|||||||
|
|
||||||
List<TreeNode> groupNodes = [];
|
List<TreeNode> groupNodes = [];
|
||||||
map.forEach((group, users) {
|
map.forEach((group, users) {
|
||||||
final groupRuleIndex = rules.indexWhere(
|
final groupRuleIndex = rules.indexWhere((e) => e.group == group);
|
||||||
(e) => e.level == ShareLevel.group.value && e.name == group);
|
|
||||||
final children = buildUserNodes(users);
|
final children = buildUserNodes(users);
|
||||||
if (!match(group) && children.isEmpty) {
|
if (!match(group) && children.isEmpty) {
|
||||||
return;
|
return;
|
||||||
@ -1061,8 +1059,7 @@ class __RuleTreeState extends State<_RuleTree> {
|
|||||||
if (groupRuleIndex < 0) {
|
if (groupRuleIndex < 0) {
|
||||||
if (!onlyShowExisting || children.isNotEmpty) {
|
if (!onlyShowExisting || children.isNotEmpty) {
|
||||||
groupNodes.add(TreeNode(
|
groupNodes.add(TreeNode(
|
||||||
content: _buildEmptyNodeContent(
|
content: _buildEmptyNodeContent(null, group, totalWidth, indent),
|
||||||
ShareLevel.group, group, totalWidth, indent),
|
|
||||||
key: ValueKey(keyIndex++),
|
key: ValueKey(keyIndex++),
|
||||||
children: children));
|
children: children));
|
||||||
}
|
}
|
||||||
@ -1077,15 +1074,14 @@ class __RuleTreeState extends State<_RuleTree> {
|
|||||||
|
|
||||||
List<TreeNode> totalNodes = [];
|
List<TreeNode> totalNodes = [];
|
||||||
final teamRuleIndex =
|
final teamRuleIndex =
|
||||||
rules.indexWhere((e) => e.level == ShareLevel.team.value);
|
rules.indexWhere((e) => e.user == null && e.group == null);
|
||||||
if (!match(ShareLevel.teamName) && groupNodes.isEmpty) {
|
if (!match(AbRulePayload.teamName) && groupNodes.isEmpty) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
if (teamRuleIndex < 0) {
|
if (teamRuleIndex < 0) {
|
||||||
if (!onlyShowExisting || groupNodes.isNotEmpty) {
|
if (!onlyShowExisting || groupNodes.isNotEmpty) {
|
||||||
totalNodes.add(TreeNode(
|
totalNodes.add(TreeNode(
|
||||||
content: _buildEmptyNodeContent(
|
content: _buildEmptyNodeContent(null, null, totalWidth, 0),
|
||||||
ShareLevel.team, ShareLevel.teamName, totalWidth, 0),
|
|
||||||
key: ValueKey(keyIndex++),
|
key: ValueKey(keyIndex++),
|
||||||
children: groupNodes));
|
children: groupNodes));
|
||||||
}
|
}
|
||||||
@ -1093,10 +1089,7 @@ class __RuleTreeState extends State<_RuleTree> {
|
|||||||
final rule = rules[teamRuleIndex];
|
final rule = rules[teamRuleIndex];
|
||||||
totalNodes.add(TreeNode(
|
totalNodes.add(TreeNode(
|
||||||
content: _buildRuleNodeContent(
|
content: _buildRuleNodeContent(
|
||||||
AbRulePayload(
|
AbRulePayload(rule.guid, null, null, rule.rule), totalWidth, 0),
|
||||||
rule.guid, rule.level, ShareLevel.teamName, rule.rule),
|
|
||||||
totalWidth,
|
|
||||||
0),
|
|
||||||
key: ValueKey(keyIndex++),
|
key: ValueKey(keyIndex++),
|
||||||
children: groupNodes));
|
children: groupNodes));
|
||||||
}
|
}
|
||||||
@ -1170,7 +1163,8 @@ class __RuleTreeState extends State<_RuleTree> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildEmptyNodeContent(
|
Widget _buildEmptyNodeContent(
|
||||||
ShareLevel level, String name, double totalWidth, double indent) {
|
String? user, String? group, double totalWidth, double indent) {
|
||||||
|
String name = AbRulePayload.buildName(user, group);
|
||||||
return SizedBox(
|
return SizedBox(
|
||||||
width: totalWidth - indent,
|
width: totalWidth - indent,
|
||||||
child: Row(
|
child: Row(
|
||||||
@ -1191,8 +1185,7 @@ class __RuleTreeState extends State<_RuleTree> {
|
|||||||
setState(() {
|
setState(() {
|
||||||
isInProgress = true;
|
isInProgress = true;
|
||||||
});
|
});
|
||||||
final errMsg =
|
final errMsg = await gFFI.abModel.addRule(user, group, rule);
|
||||||
await gFFI.abModel.addRule(name, level.value, rule);
|
|
||||||
setState(() {
|
setState(() {
|
||||||
isInProgress = false;
|
isInProgress = false;
|
||||||
});
|
});
|
||||||
@ -1217,7 +1210,7 @@ class __RuleTreeState extends State<_RuleTree> {
|
|||||||
width: totalWidth - indent,
|
width: totalWidth - indent,
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
SizedBox(width: col1Width - indent, child: _text(rule.name)),
|
SizedBox(width: col1Width - indent, child: _text(rule.getName())),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
width: col2Width, child: _text(ShareRule.shortDesc(rule.rule))),
|
width: col2Width, child: _text(ShareRule.shortDesc(rule.rule))),
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
@ -1248,7 +1241,7 @@ class __RuleTreeState extends State<_RuleTree> {
|
|||||||
text: "Invalid rule: ${rule.rule}");
|
text: "Invalid rule: ${rule.rule}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_addOrUpdateRuleDialog(onSubmit, rule.rule, rule.name);
|
_addOrUpdateRuleDialog(onSubmit, rule.rule, rule.getName());
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
_iconButton(
|
_iconButton(
|
||||||
|
@ -402,7 +402,7 @@ class AbModel {
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<String?> addRule(String name, int level, int rule) async {
|
Future<String?> addRule(String? user, String? group, int rule) async {
|
||||||
try {
|
try {
|
||||||
final abGuid = current.sharedProfile()?.guid;
|
final abGuid = current.sharedProfile()?.guid;
|
||||||
if (abGuid == null) {
|
if (abGuid == null) {
|
||||||
@ -412,9 +412,9 @@ class AbModel {
|
|||||||
var headers = getHttpHeaders();
|
var headers = getHttpHeaders();
|
||||||
headers['Content-Type'] = "application/json";
|
headers['Content-Type'] = "application/json";
|
||||||
final body = jsonEncode({
|
final body = jsonEncode({
|
||||||
'ab': abGuid,
|
'guid': abGuid,
|
||||||
'name': name,
|
'user': user,
|
||||||
'level': level,
|
'group': group,
|
||||||
'rule': rule,
|
'rule': rule,
|
||||||
});
|
});
|
||||||
final resp =
|
final resp =
|
||||||
|
Loading…
Reference in New Issue
Block a user