o2_contact_permission_manager.dart 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import '../models/index.dart';
  2. import 'log_util.dart';
  3. import 'o2_api_manager.dart';
  4. class O2ContactPermissionManager {
  5. static final O2ContactPermissionManager instance = O2ContactPermissionManager._internal();
  6. factory O2ContactPermissionManager() => instance;
  7. O2ContactPermissionManager._internal();
  8. ContactPermission? data;
  9. // 隐藏手机号码的人员列表
  10. List<String> hideMobilePersons = [];
  11. // 不查询的人员列表
  12. List<String> excludePersons = [];
  13. // 不查询的组织列表
  14. List<String> excludeUnits = [];
  15. // 不允许查询通讯录的人员
  16. List<String> limitAll = [];
  17. // 不允许查看外部门 包含人员和组织
  18. List<String> limitOuter = [];
  19. void initData(ContactPermission permissionData) {
  20. data = permissionData;
  21. hideMobilePersons.clear();
  22. hideMobilePersons.addAll( permissionData.hideMobilePerson?.split(",").toList() ?? []);
  23. excludePersons.clear();
  24. excludePersons.addAll(permissionData.excludePerson?.split(",").toList() ?? []);
  25. excludeUnits.clear();
  26. excludeUnits.addAll(permissionData.excludeUnit?.split(",").toList() ?? []);
  27. limitAll.clear();
  28. limitAll.addAll(permissionData.limitQueryAll?.split(",").toList() ?? []);
  29. limitOuter.clear();
  30. limitOuter.addAll(permissionData.limitQueryOuter?.split(",").toList() ?? []);
  31. OLogger.d('初始化通讯录权限完成!${permissionData.toJson()}');
  32. }
  33. ///
  34. /// 判断 传入的人员是否需要隐藏手机号码
  35. /// @param person 程剑@chengjian@P
  36. ///
  37. bool isHiddenMobile(String person) {
  38. if (person.isEmpty) return false;
  39. return hideMobilePersons.contains(person);
  40. }
  41. ///
  42. /// 判断 传入的人员是否要排除
  43. /// @param person 程剑@chengjian@P
  44. ///
  45. bool isExcludePerson(String person) {
  46. if (person.isEmpty) return false;
  47. return excludePersons.contains(person);
  48. }
  49. ///
  50. /// 判断 传入的组织是否要排除
  51. ///@param unit 团队领导@b7e3a8d3-21d4-4802-babf-9fc85392333d@U
  52. ///
  53. bool isExcludeUnit(String unit ) {
  54. if (unit.isEmpty) return false;
  55. return excludeUnits.contains(unit);
  56. }
  57. ///
  58. /// 判断 当前用户是否不能查询通讯录
  59. ///
  60. bool isCurrentPersonCannotQueryAll() {
  61. var currentDN = O2ApiManager.instance.me().distinguishedName;
  62. if (currentDN.isEmpty) {
  63. return false;
  64. }
  65. return limitAll.contains(currentDN);
  66. }
  67. ///
  68. /// 判断 当前用户是否不能查询外部门
  69. ///
  70. bool isCurrentPersonCannotQueryOuter() {
  71. OLogger.d('不能查询外部门 $limitOuter');
  72. var currentPersonDN = O2ApiManager.instance.me().distinguishedName;
  73. if (currentPersonDN.isEmpty) {
  74. return false;
  75. }
  76. OLogger.d('当前 dn $currentPersonDN' );
  77. if (limitOuter.contains(currentPersonDN)) {
  78. return true;
  79. }
  80. // limitOuter还包含了部门数据
  81. final unitList = O2ApiManager.instance.myUnitList;
  82. OLogger.d("我的部门 ${unitList.length}");
  83. for (var element in unitList) {
  84. OLogger.d('匹配部门 ${element.distinguishedName}');
  85. if (limitOuter.contains(element.distinguishedName)){
  86. return true;
  87. }
  88. }
  89. return false;
  90. }
  91. }