RoleMenu.php 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types = 1);
  12. namespace app\store\model\store;
  13. use app\common\model\store\RoleMenu as RoleMenuModel;
  14. /**
  15. * 商家后台用户角色与菜单权限关系模型
  16. * Class RoleMenu
  17. * @package app\store\model\store
  18. */
  19. class RoleMenu extends RoleMenuModel
  20. {
  21. /**
  22. * 新增关系记录
  23. * @param int $roleId
  24. * @param array $menuIds
  25. * @return array|false
  26. */
  27. public static function increased(int $roleId, array $menuIds)
  28. {
  29. $data = [];
  30. foreach ($menuIds as $menuId) {
  31. $data[] = [
  32. 'role_id' => $roleId,
  33. 'menu_id' => $menuId,
  34. 'store_id' => self::$storeId,
  35. ];
  36. }
  37. return (new static)->addAll($data);
  38. }
  39. /**
  40. * 更新关系记录
  41. * @param int $roleId
  42. * @param array $newMenus
  43. * @return array|false
  44. */
  45. public static function updates(int $roleId, array $newMenus)
  46. {
  47. // 已分配的权限集
  48. $assignMenuIds = self::getMenuIds([$roleId]);
  49. /**
  50. * 找出删除的权限
  51. * 假如已有的权限集合是A,界面传递过得权限集合是B
  52. * 权限集合A当中的某个权限不在权限集合B当中,就应该删除
  53. * 使用 array_diff() 计算补集
  54. */
  55. if ($deleteMenuIds = array_diff($assignMenuIds, $newMenus)) {
  56. self::deleteAll([
  57. ['role_id', '=', $roleId],
  58. ['menu_id', 'in', $deleteMenuIds]
  59. ]);
  60. }
  61. /**
  62. * 找出添加的权限
  63. * 假如已有的权限集合是A,界面传递过得权限集合是B
  64. * 权限集合B当中的某个权限不在权限集合A当中,就应该添加
  65. * 使用 array_diff() 计算补集
  66. */
  67. $newMenuIds = array_diff($newMenus, $assignMenuIds);
  68. $data = [];
  69. foreach ($newMenuIds as $menuId) {
  70. $data[] = [
  71. 'role_id' => $roleId,
  72. 'menu_id' => $menuId,
  73. 'store_id' => self::$storeId,
  74. ];
  75. }
  76. return (new static)->addAll($data);
  77. }
  78. /**
  79. * 获取指定角色的所有菜单id
  80. * @param array $roleIds 角色ID集
  81. * @return array
  82. */
  83. public static function getMenuIds(array $roleIds): array
  84. {
  85. return (new self)->where('role_id', 'in', $roleIds)->column('menu_id');
  86. }
  87. }