hasPermission.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /**
  2. * 权限控制指令
  3. * 用法: v-has-permission="'增删成员'"
  4. * 如果用户有该权限则显示元素,否则隐藏
  5. */
  6. export default {
  7. install(app) {
  8. app.directive('has-permission', {
  9. mounted(el, binding) {
  10. checkPermission(el, binding);
  11. },
  12. updated(el, binding) {
  13. checkPermission(el, binding);
  14. }
  15. });
  16. }
  17. };
  18. function checkPermission(el, binding) {
  19. // 获取权限值,支持字符串或数组
  20. const permission = binding.value;
  21. // 从 localStorage 获取用户信息
  22. const userInfoStr = localStorage.getItem('localUserInfo');
  23. if (!userInfoStr) {
  24. el.style.display = 'none';
  25. return;
  26. }
  27. try {
  28. const userInfo = JSON.parse(userInfoStr);
  29. const permissions = userInfo.agriculturalPermissions || [];
  30. // 如果权限是字符串,检查是否包含
  31. if (typeof permission === 'string') {
  32. const hasPermission = permissions.includes(permission);
  33. el.style.display = hasPermission ? '' : 'none';
  34. }
  35. // 如果权限是数组,检查是否包含任一权限
  36. else if (Array.isArray(permission)) {
  37. const hasPermission = permission.some(p => permissions.includes(p));
  38. el.style.display = hasPermission ? '' : 'none';
  39. }
  40. // 如果没有传入权限值,默认隐藏
  41. else {
  42. el.style.display = 'none';
  43. }
  44. } catch (error) {
  45. console.error('解析用户信息失败:', error);
  46. el.style.display = 'none';
  47. }
  48. }