PermissionTrait.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Author: 芸众商城 www.yunzshop.com
  5. * Date: 08/03/2017
  6. * Time: 09:39
  7. */
  8. namespace app\common\traits;
  9. use app\common\models\user\User;
  10. trait PermissionTrait
  11. {
  12. public function isAuth()
  13. {
  14. return \YunShop::app()->uid;
  15. }
  16. /**
  17. * 检测是否有权限
  18. * @param $route
  19. * @return bool
  20. */
  21. public function can($route)
  22. {
  23. if($this->checkNoPermission($route) === true){
  24. return true;
  25. }
  26. if ($this->isFounder()) {
  27. return true;
  28. }
  29. return in_array($route, User::userPermissionCache());
  30. }
  31. /**
  32. * 检测是否存在白名单
  33. * @param $route
  34. * @return bool
  35. */
  36. public function checkNoPermission($route)
  37. {
  38. $noPermissions = \Cache::get('noPermissions');
  39. if($noPermissions === null){
  40. $noPermissions = $this->getNoPermissionList(\app\backend\modules\menu\Menu::current()->getItems());
  41. \Cache::put('noPermissions',$noPermissions);
  42. }
  43. if(in_array($route, $noPermissions)){
  44. return true;
  45. }
  46. return false;
  47. }
  48. /**
  49. * 获取权限白名单
  50. * @param $menus
  51. * @return array
  52. */
  53. public function getNoPermissionList($menus)
  54. {
  55. $noPermissions = [];
  56. if ($menus) {
  57. foreach ($menus as $key => $m) {
  58. if (!(isset($m['permit']) && $m['permit'] === 1)) {
  59. $noPermissions[] = $key;
  60. }
  61. if(isset($m['child']) && $m['child']){
  62. $noPermissions = array_merge($noPermissions,$this->getNoPermissionList($m['child']));
  63. }
  64. }
  65. }
  66. return $noPermissions;
  67. }
  68. /**
  69. * 是否是创始人
  70. * @return mixed
  71. */
  72. public function isFounder()
  73. {
  74. return \YunShop::app()->isfounder === true;
  75. }
  76. }