Просмотр исходного кода

用户模型增加canSeeMenu方法控制是否可见菜单

jqh 5 лет назад
Родитель
Сommit
24142d92f5
2 измененных файлов с 35 добавлено и 5 удалено
  1. 23 5
      src/Layout/Menu.php
  2. 12 0
      src/Models/Administrator.php

+ 23 - 5
src/Layout/Menu.php

@@ -161,11 +161,11 @@ class Menu
      */
     public function visible($item)
     {
-        if (! $this->checkPermission($item)) {
-            return false;
-        }
-
-        if (! $this->checkExtension($item)) {
+        if (
+            ! $this->checkPermission($item)
+            || ! $this->checkExtension($item)
+            || ! $this->userCanSeeMenu($item)
+        ) {
             return false;
         }
 
@@ -199,6 +199,24 @@ class Menu
         return $extension->enabled();
     }
 
+    /**
+     * 判断用户
+     *
+     * @param array|\Dcat\Admin\Models\Menu $item
+     *
+     * @return bool
+     */
+    protected function userCanSeeMenu($item)
+    {
+        $user = Admin::user();
+
+        if (! $user || ! method_exists($user, 'canSeeMenu')) {
+            return true;
+        }
+
+        return $user->canSeeMenu($item);
+    }
+
     /**
      * 判断权限.
      *

+ 12 - 0
src/Models/Administrator.php

@@ -75,4 +75,16 @@ class Administrator extends Model implements AuthenticatableContract
 
         return $this->belongsToMany($relatedModel, $pivotTable, 'user_id', 'role_id');
     }
+
+    /**
+     * 判断是否允许查看菜单.
+     *
+     * @param array|Menu $menu
+     *
+     * @return bool
+     */
+    public function canSeeMenu($menu)
+    {
+        return true;
+    }
 }