feat: 用户的可访问菜单的读取接口
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/Application.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/Application.java
index a5098a6..3e63d83 100644
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/Application.java
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/Application.java
@@ -3,10 +3,6 @@
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.openfeign.EnableFeignClients;
-import org.springframework.context.annotation.Bean;
-import org.springframework.web.cors.CorsConfiguration;
-import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
-import org.springframework.web.filter.CorsFilter;
 
 import com.supwisdom.infras.online.doc.configuration.EnableInfrasOnlineDoc;
 import com.supwisdom.institute.backend.common.core.transmit.annotation.EnableSimpleUserTransmit;
@@ -25,18 +21,4 @@
     SpringApplication.run(Application.class, args);
   }
   
-  @Bean
-  public CorsFilter corsFilter() {
-    final CorsConfiguration config = new CorsConfiguration();
-    // config.setAllowCredentials(true);
-    config.addAllowedOrigin("*");
-    config.addAllowedHeader("*");
-    config.addAllowedMethod("*");
-
-    final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
-    source.registerCorsConfiguration("/v2/api-docs", config);
-
-    return new CorsFilter(source);
-  }
-
 }
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/biz/AdminBizController.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/biz/AdminBizController.java
index 8ce27ec..84d17e6 100644
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/biz/AdminBizController.java
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/biz/AdminBizController.java
@@ -9,7 +9,7 @@
 import com.supwisdom.institute.backend.admin.bff.apis.service.biz.BizService;
 
 @RestController
-@RequestMapping(value = "/api/bff/v1/admin/biz")
+@RequestMapping(value = "/v1/admin/biz")
 public class AdminBizController {
   
   @Autowired
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/me/MeController.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/me/MeController.java
new file mode 100644
index 0000000..8fbd916
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/me/MeController.java
@@ -0,0 +1,82 @@
+package com.supwisdom.institute.backend.admin.bff.apis.controller.me;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+
+import com.supwisdom.institute.backend.admin.bff.apis.model.base.Permission;
+import com.supwisdom.institute.backend.admin.bff.apis.model.me.CurrentUser;
+import com.supwisdom.institute.backend.admin.bff.apis.model.me.GrantedMenu;
+import com.supwisdom.institute.backend.admin.bff.apis.service.base.AuthnAccountService;
+import com.supwisdom.institute.backend.admin.bff.apis.vo.me.response.data.CurrentUserResponseData;
+import com.supwisdom.institute.backend.admin.bff.apis.vo.me.response.data.GrantedMenusResponseData;
+import com.supwisdom.institute.backend.admin.bff.utils.CurrentUserUtil;
+import com.supwisdom.institute.backend.common.core.transmit.user.User;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
+
+
+@Api(value = "BFFMe", tags = { "me" }, description = "登录用户相关信息的接口")
+@RestController
+@RequestMapping(value = "/v1/me")
+public class MeController {
+  
+  @Autowired
+  private AuthnAccountService authnAccountService;
+  
+  @ApiOperation(
+      tags = { "me" },
+      value = "获取登录用户的基本信息", notes = "获取登录用户的基本信息", nickname = "user"
+  )
+  @RequestMapping(method = RequestMethod.GET, path = "/user", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public DefaultApiResponse<CurrentUserResponseData> user() {
+    
+    User user = CurrentUserUtil.currentUser();
+    
+    CurrentUser cu = new CurrentUser();
+    cu.setUsername(user.getUsername());
+    cu.setRoles(user.getRoles());
+    cu.setAttributes(user.getAttributes());
+    
+    // XXX: 如果需要放入其他信息,可以扩展CurrentUser,并从服务接口中获取后写入数据
+    
+    CurrentUserResponseData data = CurrentUserResponseData.of(cu);
+    return new DefaultApiResponse<CurrentUserResponseData>(data);
+  }
+  
+  @ApiOperation(
+      tags = { "me" },
+      value = "获取登录用户的访问菜单", notes = "获取登录用户的访问菜单", nickname = "menus"
+  )
+  @RequestMapping(method = RequestMethod.GET, path = "/menus", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public DefaultApiResponse<GrantedMenusResponseData> menus() {
+    
+    String username = CurrentUserUtil.currentUsername();
+    
+    List<Permission> menus =  authnAccountService.menus(username, "1");
+    
+    List<GrantedMenu> grantedMenus = new ArrayList<>();
+    
+    menus.forEach(m -> {
+      GrantedMenu grantedMenu = new GrantedMenu();
+      grantedMenu = EntityUtils.copy(m, grantedMenu);
+      grantedMenus.add(grantedMenu);
+    });
+    
+    GrantedMenusResponseData data = GrantedMenusResponseData.of(grantedMenus);
+    return new DefaultApiResponse<GrantedMenusResponseData>(data);
+    
+  }
+  
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/base/Account.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/base/Account.java
new file mode 100644
index 0000000..52665e5
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/base/Account.java
@@ -0,0 +1,70 @@
+package com.supwisdom.institute.backend.admin.bff.apis.model.base;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.model.ABaseModel;
+
+@Getter
+@Setter
+public class Account extends ABaseModel {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -4889952442290543101L;
+
+  private String id;
+
+  /**
+   * 用户名
+   */
+  private String username;
+  
+  /**
+   * 密码
+   */
+  private String password;
+
+  /**
+   * 是否可用,1 可用,0 不可用,默认:1
+   */
+  private Boolean enabled;
+  /**
+   * 账号未过期,1 未过期,0 过期,默认:1
+   */
+  private Boolean accountNonExpired;
+  /**
+   * 账号未锁定,1 未锁定,0 锁定,默认:1
+   */
+  private Boolean accountNonLocked;
+  /**
+   * 密码未过期,1 未过期,0 过期,默认:1
+   */
+  private Boolean credentialsNonExpired;
+
+  /**
+   * 姓名
+   */
+  private String name;
+
+  /**
+   * 备注
+   */
+  private String memo;
+
+  /**
+   * 状态(1 启用,0 停用)
+   */
+  private String status;
+
+  /**
+   * 登录手机
+   */
+  private String mobile;
+  /**
+   * 登录邮箱
+   */
+  private String email;
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/base/Permission.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/base/Permission.java
new file mode 100644
index 0000000..ac0404e
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/base/Permission.java
@@ -0,0 +1,64 @@
+package com.supwisdom.institute.backend.admin.bff.apis.model.base;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.model.ABaseModel;
+
+@Getter
+@Setter
+public class Permission extends ABaseModel {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -3042842657207449148L;
+
+  private String id;
+
+  /**
+   * 代码
+   */
+  private String code;
+
+  /**
+   * 名称
+   */
+  private String name;
+
+  /**
+   * 备注
+   */
+  private String memo;
+
+  /**
+   * 状态(1 启用,0 停用)
+   */
+  private String status;
+
+  /**
+   * 类型(1 应用,2 菜单,3 操作)
+   */
+  private String type;
+
+  /**
+   * URL地址
+   */
+  private String url;
+
+  /**
+   * 系统ID
+   */
+  private String applicationId;
+
+  /**
+   * 父级ID
+   */
+  private String parentId;
+
+  /**
+   * 排序
+   */
+  private Integer order;
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/base/Role.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/base/Role.java
new file mode 100644
index 0000000..5d62b6b
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/base/Role.java
@@ -0,0 +1,39 @@
+package com.supwisdom.institute.backend.admin.bff.apis.model.base;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.model.ABaseModel;
+
+@Getter
+@Setter
+public class Role extends ABaseModel {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -8551951601186240995L;
+
+  private String id;
+
+  /**
+   * 代码
+   */
+  private String code;
+
+  /**
+   * 名称
+   */
+  private String name;
+
+  /**
+   * 备注
+   */
+  private String memo;
+
+  /**
+   * 状态(1 启用,0 停用)
+   */
+  private String status;
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/me/CurrentUser.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/me/CurrentUser.java
new file mode 100644
index 0000000..be72993
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/me/CurrentUser.java
@@ -0,0 +1,30 @@
+package com.supwisdom.institute.backend.admin.bff.apis.model.me;
+
+import java.util.List;
+import java.util.Map;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.model.ABaseModel;
+
+public class CurrentUser extends ABaseModel {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 2049212615500816301L;
+  
+  @Getter
+  @Setter
+  private String username;
+  
+  @Getter
+  @Setter
+  private List<String> roles;
+  
+  @Getter
+  @Setter
+  private Map<String, Object> attributes;
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/me/GrantedMenu.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/me/GrantedMenu.java
new file mode 100644
index 0000000..05881ac
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/me/GrantedMenu.java
@@ -0,0 +1,59 @@
+package com.supwisdom.institute.backend.admin.bff.apis.model.me;
+
+import com.supwisdom.institute.backend.common.framework.model.ABaseModel;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class GrantedMenu extends ABaseModel {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -1261755008133562980L;
+
+  private String id;
+
+  /**
+   * 代码
+   */
+  private String code;
+
+  /**
+   * 名称
+   */
+  private String name;
+
+  /**
+   * 备注
+   */
+  private String memo;
+
+  /**
+   * 状态(1 启用,0 停用)
+   */
+  private String status;
+
+  /**
+   * URL地址
+   */
+  private String url;
+
+  /**
+   * 系统ID
+   */
+  private String applicationId;
+
+  /**
+   * 父级ID
+   */
+  private String parentId;
+
+  /**
+   * 排序
+   */
+  private Integer order;
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AuthnAccountRemoteFallbackFactory.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AuthnAccountRemoteFallbackFactory.java
index 1ff4981..a7605af 100644
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AuthnAccountRemoteFallbackFactory.java
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AuthnAccountRemoteFallbackFactory.java
@@ -1,12 +1,66 @@
 package com.supwisdom.institute.backend.admin.bff.apis.remote.base.v1.admin;
 
+import org.springframework.stereotype.Component;
+
+import com.alibaba.fastjson.JSONObject;
+import com.supwisdom.institute.backend.admin.bff.apis.remote.exception.FallbackError;
+
 import feign.hystrix.FallbackFactory;
 
-public class AdminAccountRemoteFallbackFactory implements FallbackFactory<AdminAccountRemoteFeignClient> {
+@Component
+public class AuthnAccountRemoteFallbackFactory implements FallbackFactory<AuthnAccountRemoteFeignClient> {
 
   @Override
-  public AdminAccountRemoteFeignClient create(Throwable cause) {
-    return new AdminAccountRemoteFeignClient() {
+  public AuthnAccountRemoteFeignClient create(Throwable cause) {
+    return new AuthnAccountRemoteFeignClient() {
+
+      @Override
+      public JSONObject account(String username) {
+        if (cause != null) {
+          cause.printStackTrace();
+        }
+        return FallbackError.defaultErrorJson(cause);
+      }
+
+      @Override
+      public JSONObject roles(String username) {
+        if (cause != null) {
+          cause.printStackTrace();
+        }
+        return FallbackError.defaultErrorJson(cause);
+      }
+
+      @Override
+      public JSONObject applications(String username, String applicationId) {
+        if (cause != null) {
+          cause.printStackTrace();
+        }
+        return FallbackError.defaultErrorJson(cause);
+      }
+
+      @Override
+      public JSONObject menus(String username, String applicationId) {
+        if (cause != null) {
+          cause.printStackTrace();
+        }
+        return FallbackError.defaultErrorJson(cause);
+      }
+
+      @Override
+      public JSONObject operations(String username, String applicationId) {
+        if (cause != null) {
+          cause.printStackTrace();
+        }
+        return FallbackError.defaultErrorJson(cause);
+      }
+
+      @Override
+      public JSONObject resources(String username, String applicationId) {
+        if (cause != null) {
+          cause.printStackTrace();
+        }
+        return FallbackError.defaultErrorJson(cause);
+      }
       
     };
   }
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AuthnAccountRemoteFeignClient.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AuthnAccountRemoteFeignClient.java
index 99b04b8..e73bd54 100644
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AuthnAccountRemoteFeignClient.java
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/base/v1/admin/AuthnAccountRemoteFeignClient.java
@@ -1,15 +1,49 @@
 package com.supwisdom.institute.backend.admin.bff.apis.remote.base.v1.admin;
 
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
 
+import com.alibaba.fastjson.JSONObject;
 import com.supwisdom.institute.backend.admin.bff.apis.remote.base.configuration.BaseFeignClientConfiguration;
 
 @FeignClient(
     configuration = {BaseFeignClientConfiguration.class},
     name = "base-admin-account-remote-feign-client",
-    url = "${sw-backend-base-api.uri}/v1/admin/accounts",
-    fallbackFactory = AdminAccountRemoteFallbackFactory.class
+    url = "${sw-backend-base-api.uri}/v1/authn",
+    fallbackFactory = AuthnAccountRemoteFallbackFactory.class
 )
-public interface AdminAccountRemoteFeignClient {
+public interface AuthnAccountRemoteFeignClient {
+  
+  @RequestMapping(method = RequestMethod.GET, path = "/{username}/account")
+  JSONObject account(
+      @PathVariable(name = "username") String username);
+
+  @RequestMapping(method = RequestMethod.GET, path = "/{username}/roles")
+  JSONObject roles(
+      @PathVariable(name = "username") String username);
+
+  @RequestMapping(method = RequestMethod.GET, path = "/{username}/applications")
+  JSONObject applications(
+      @PathVariable(name = "username") String username,
+      @RequestParam(name = "applicationId", required = false) String applicationId);
+
+  @RequestMapping(method = RequestMethod.GET, path = "/{username}/menus")
+  JSONObject menus(
+      @PathVariable(name = "username") String username,
+      @RequestParam(name = "applicationId", required = false) String applicationId);
+
+  @RequestMapping(method = RequestMethod.GET, path = "/{username}/operations")
+  JSONObject operations(
+      @PathVariable(name = "username") String username,
+      @RequestParam(name = "applicationId", required = false) String applicationId);
+
+
+  @RequestMapping(method = RequestMethod.GET, path = "/{username}/resources")
+  JSONObject resources(
+      @PathVariable(name = "username") String username,
+      @RequestParam(name = "applicationId", required = false) String applicationId);
 
 }
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/base/AuthnAccountService.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/base/AuthnAccountService.java
new file mode 100644
index 0000000..ff21fa5
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/base/AuthnAccountService.java
@@ -0,0 +1,68 @@
+package com.supwisdom.institute.backend.admin.bff.apis.service.base;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.supwisdom.institute.backend.admin.bff.apis.model.base.Account;
+import com.supwisdom.institute.backend.admin.bff.apis.model.base.Permission;
+import com.supwisdom.institute.backend.admin.bff.apis.model.base.Role;
+import com.supwisdom.institute.backend.admin.bff.apis.remote.base.v1.admin.AuthnAccountRemoteFeignClient;
+
+@Service
+public class AuthnAccountService {
+  
+  @Autowired
+  private AuthnAccountRemoteFeignClient authnAccountRemote;
+  
+  public Account account(String username) {
+    
+    JSONObject jsonObject = authnAccountRemote.account(username);
+    if (jsonObject == null) {
+      return null;
+    }
+    
+    if (jsonObject.getIntValue("code") == 0) {
+      JSONObject data = jsonObject.getJSONObject("data");
+      
+      return data.toJavaObject(Account.class);
+    }
+    
+    return null;
+  }
+
+  public List<Role> roles(String username) {
+    
+    JSONObject jsonObject = authnAccountRemote.roles(username);
+    if (jsonObject == null) {
+      return null;
+    }
+    
+    if (jsonObject.getIntValue("code") == 0) {
+      JSONObject data = jsonObject.getJSONObject("data");
+      
+      return data.getJSONArray("roles").toJavaList(Role.class);
+    }
+    
+    return null;
+  }
+
+  public List<Permission> menus(String username, String applicationId) {
+    
+    JSONObject jsonObject = authnAccountRemote.menus(username, applicationId);
+    if (jsonObject == null) {
+      return null;
+    }
+    
+    if (jsonObject.getIntValue("code") == 0) {
+      JSONObject data = jsonObject.getJSONObject("data");
+      
+      return data.getJSONArray("permissions").toJavaList(Permission.class);
+    }
+    
+    return null;
+  }
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/me/response/data/CurrentUserResponseData.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/me/response/data/CurrentUserResponseData.java
new file mode 100644
index 0000000..566972d
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/me/response/data/CurrentUserResponseData.java
@@ -0,0 +1,23 @@
+package com.supwisdom.institute.backend.admin.bff.apis.vo.me.response.data;
+
+import org.springframework.beans.BeanUtils;
+
+import com.supwisdom.institute.backend.admin.bff.apis.model.me.CurrentUser;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+public class CurrentUserResponseData extends CurrentUser implements IApiResponseData {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 2296310299015658064L;
+
+  public static CurrentUserResponseData of(CurrentUser currentUser) {
+    CurrentUserResponseData data = new CurrentUserResponseData();
+    
+    BeanUtils.copyProperties(currentUser, data);
+    
+    return data;
+  }
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/me/response/data/GrantedMenusResponseData.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/me/response/data/GrantedMenusResponseData.java
new file mode 100644
index 0000000..c90957c
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/me/response/data/GrantedMenusResponseData.java
@@ -0,0 +1,30 @@
+package com.supwisdom.institute.backend.admin.bff.apis.vo.me.response.data;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.admin.bff.apis.model.me.GrantedMenu;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+public class GrantedMenusResponseData implements IApiResponseData {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -7495122676647463043L;
+  
+  @Getter
+  @Setter
+  private List<GrantedMenu> menus;
+
+  public static GrantedMenusResponseData of(List<GrantedMenu> grantedMenus) {
+    GrantedMenusResponseData data = new GrantedMenusResponseData();
+    
+    data.setMenus(grantedMenus);
+    
+    return data;
+  }
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/FeignBasicAuthRequestInterceptor.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/FeignBasicAuthRequestInterceptor.java
index 2a22b46..191e1e8 100644
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/FeignBasicAuthRequestInterceptor.java
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/FeignBasicAuthRequestInterceptor.java
@@ -15,7 +15,7 @@
  * feign请求参数转化
  * @author fengpy
  */
-@Configuration
+//@Configuration
 public class FeignBasicAuthRequestInterceptor implements RequestInterceptor {
     @Autowired
     private ObjectMapper objectMapper;
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/utils/CurrentUserUtil.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/utils/CurrentUserUtil.java
new file mode 100644
index 0000000..b97e5ae
--- /dev/null
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/utils/CurrentUserUtil.java
@@ -0,0 +1,26 @@
+package com.supwisdom.institute.backend.admin.bff.utils;
+
+import com.supwisdom.institute.backend.common.core.transmit.user.User;
+import com.supwisdom.institute.backend.common.core.transmit.user.UserContext;
+
+public class CurrentUserUtil {
+  
+  public static User currentUser() {
+    User user = UserContext.getUser();
+    
+    if (user == null) {
+      throw new RuntimeException("current user is null");
+    }
+    
+    return user;
+  }
+  
+  public static String currentUsername() {
+    return currentUser().getUsername();
+  }
+
+  public static String currentUserAccountId() {
+    return String.valueOf(currentUser().getAttributes().get("accountId"));
+  }
+
+}