// 权限校验





/**
 * 路由权限校验
 * @param route 路由
 * @param permissions 用户权限集合
 * @param roles 用户角色集合
 * @returns {boolean}
 */
function hasAuthority(to, permissions) { // 权限校验
  // 循环 to.meta.authority.permission 集合
  if (to.meta.authority.permission){
    if (to.meta.authority.permission.length > 0) {
      for (let i = 0; i < to.meta.authority.permission.length; i++) {
        // 判断用户权限集合中是否包含 to.meta.authority.permission 中的权限
        if (permissions){
          if (permissions.includes(to.meta.authority.permission[i])) {
            return false
          }
        }
      }
    }
  }
  // 如果 to.meta.authority.permission 匹配到了 permissions 中的某个权限，就返回false
  return true // 如果都满足，返回true
}

/**
 * 根据权限配置过滤菜单数据
 * @param menuData
 * @param permissions
 * @param roles
 *  主要是在src\store\modules\setting.js中使用
 */
function filterMenu(menuData, permissions, roles) { // 过滤菜单
  return menuData.filter(menu => {
    if (menu.meta && menu.meta.invisible === undefined) { // 如果菜单有meta属性，并且没有invisible属性
      if (!hasAuthority(menu, permissions)) { // 如果没有权限
        return false // 返回false
      }
    }
    if (menu.children && menu.children.length > 0) {  // 如果有子菜单
      menu.children = filterMenu(menu.children, permissions, roles) // 递归过滤子菜单
    }
    return true // 返回true
  })
}

export {filterMenu, hasAuthority} // 导出过滤菜单和权限校验方法
