permission.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import store from '@/store'
  2. var isIos
  3. // #ifdef APP-PLUS
  4. isIos = (plus.os.name == "iOS")
  5. // #endif
  6. /**
  7. * 字符权限校验
  8. * @param {Array} value 校验值
  9. * @returns {Boolean}
  10. */
  11. export function checkPermi(value) {
  12. if (value && value instanceof Array && value.length > 0) {
  13. const permissions = store.getters && store.getters.permissions
  14. const permissionDatas = value
  15. const all_permission = "*:*:*"
  16. const hasPermission = permissions.some(permission => {
  17. return all_permission === permission || permissionDatas.includes(permission)
  18. })
  19. if (!hasPermission) {
  20. return false
  21. }
  22. return true
  23. } else {
  24. // console.error(`need roles! Like checkPermi="['system:user:add','system:user:edit']"`)
  25. return false
  26. }
  27. }
  28. /**
  29. * 角色权限校验
  30. * @param {Array} value 校验值
  31. * @returns {Boolean}
  32. */
  33. export function checkRole(value) {
  34. if (value && value instanceof Array && value.length > 0) {
  35. const roles = store.getters && store.getters.roles
  36. const permissionRoles = value
  37. const super_admin = "admin"
  38. const hasRole = roles.some(role => {
  39. return super_admin === role || permissionRoles.includes(role)
  40. })
  41. if (!hasRole) {
  42. return false
  43. }
  44. return true
  45. } else {
  46. console.error(`need roles! Like checkRole="['admin','editor']"`)
  47. return false
  48. }
  49. }
  50. // Android权限查询
  51. export function requestAndroidPermission(permissionID) {
  52. return new Promise((resolve, reject) => {
  53. plus.android.requestPermissions(
  54. [permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装
  55. function(resultObj) {
  56. var result = 0;
  57. for (var i = 0; i < resultObj.granted.length; i++) {
  58. var grantedPermission = resultObj.granted[i];
  59. console.log('已获取的权限:' + grantedPermission);
  60. result = 1
  61. }
  62. for (var i = 0; i < resultObj.deniedPresent.length; i++) {
  63. var deniedPresentPermission = resultObj.deniedPresent[i];
  64. console.log('拒绝本次申请的权限:' + deniedPresentPermission);
  65. result = 0
  66. }
  67. for (var i = 0; i < resultObj.deniedAlways.length; i++) {
  68. var deniedAlwaysPermission = resultObj.deniedAlways[i];
  69. console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
  70. result = -1
  71. }
  72. // 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限
  73. if (result != 1) {
  74. gotoAppPermissionSetting()
  75. }else{
  76. resolve(result);
  77. }
  78. },
  79. function(error) {
  80. console.log('申请权限错误:' + error.code + " = " + error.message);
  81. resolve({
  82. code: error.code,
  83. message: error.message
  84. });
  85. }
  86. );
  87. });
  88. }
  89. // 跳转到**应用**的权限页面
  90. export function gotoAppPermissionSetting() {
  91. if (isIos) {
  92. var UIApplication = plus.ios.import("UIApplication");
  93. var application2 = UIApplication.sharedApplication();
  94. var NSURL2 = plus.ios.import("NSURL");
  95. // var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");
  96. var setting2 = NSURL2.URLWithString("app-settings:");
  97. application2.openURL(setting2);
  98. plus.ios.deleteObject(setting2);
  99. plus.ios.deleteObject(NSURL2);
  100. plus.ios.deleteObject(application2);
  101. } else {
  102. // console.log(plus.device.vendor);
  103. var Intent = plus.android.importClass("android.content.Intent");
  104. var Settings = plus.android.importClass("android.provider.Settings");
  105. var Uri = plus.android.importClass("android.net.Uri");
  106. var mainActivity = plus.android.runtimeMainActivity();
  107. var intent = new Intent();
  108. intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
  109. var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
  110. intent.setData(uri);
  111. mainActivity.startActivity(intent);
  112. }
  113. }