content: package com.ruoyi.framework.web.service;
  
  import java.util.HashSet;
  import java.util.List;
  import java.util.Set;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.stereotype.Component;
  import org.springframework.util.CollectionUtils;
  import com.ruoyi.common.constant.UserConstants;
  import com.ruoyi.common.core.domain.entity.SysRole;
  import com.ruoyi.common.core.domain.entity.SysUser;
  import com.ruoyi.common.utils.StringUtils;
  import com.ruoyi.system.service.ISysMenuService;
  import com.ruoyi.system.service.ISysRoleService;
  
  /**
   * 用户权限处理
   * 
   * @author ruoyi
   */
  @Component
  public class SysPermissionService
  {
      @Autowired
      private ISysRoleService roleService;
  
      @Autowired
      private ISysMenuService menuService;
  
      /**
       * 获取角色数据权限
       * 
       * @param user 用户信息
       * @return 角色权限信息
       */
      public Set<String> getRolePermission(SysUser user)
      {
          Set<String> roles = new HashSet<String>();
          // 管理员拥有所有权限
          if (user.isAdmin())
          {
              roles.add("admin");
          }
          else
          {
              roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId()));
          }
          return roles;
      }
  
      /**
       * 获取菜单数据权限
       * 
       * @param user 用户信息
       * @return 菜单权限信息
       */
      public Set<String> getMenuPermission(SysUser user)
      {
          Set<String> perms = new HashSet<String>();
          // 管理员拥有所有权限
          if (user.isAdmin())
          {
              perms.add("*:*:*");
          }
          else
          {
              List<SysRole> roles = user.getRoles();
              if (!CollectionUtils.isEmpty(roles))
              {
                  // 多角色设置permissions属性，以便数据权限匹配权限
                  for (SysRole role : roles)
                  {
                      if (StringUtils.equals(role.getStatus(), UserConstants.ROLE_NORMAL))
                      {
                          Set<String> rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId());
                          role.setPermissions(rolePerms);
                          perms.addAll(rolePerms);
                      }
                  }
              }
              else
              {
                  perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId()));
              }
          }
          return perms;
      }
  }
  