diff --git a/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt b/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt index 92c5fc4..e4763d3 100644 --- a/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt +++ b/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt @@ -54,7 +54,7 @@ class HomeFragment : Fragment() { * TODO: 正式发布前务必设置为 false */ companion object { - private const val DEV_AUTO_SELECT_MENU = true // 开发调试:自动选择菜单开关,正式发布前设为 false + private const val DEV_AUTO_SELECT_MENU = false // 开发调试:自动选择菜单开关,正式发布前设为 false private const val DEV_AUTO_SELECT_MENU_ID = Constant.AuthName.IntImp // 自动选择的目标菜单 } @@ -76,7 +76,11 @@ class HomeFragment : Fragment() { val leftMenuList = initLeftMenuData() rvLeft.adapter = HomeLeftAdapt(leftMenuList) - rvRight.adapter = HomeRightAdapt(getRightMenu4Id(leftMenuList.first().id)) + // 权限过滤后列表可能为空(账号无任何菜单权限),避免 first() 抛异常 + val firstMenuId = leftMenuList.firstOrNull()?.id + rvRight.adapter = HomeRightAdapt( + if (firstMenuId != null) getRightMenu4Id(firstMenuId) else emptyList() + ) // ========== 开发调试:自动选择指定菜单 ========== autoSelectMenuForDev() @@ -198,7 +202,7 @@ class HomeFragment : Fragment() { inner class LeftMenu(val id: String, val img: Int, val text: String) fun initLeftMenuData(): List { - var list = arrayListOf() + val list = arrayListOf() list.add(LeftMenu(Constant.AuthName.DomExp, R.mipmap.gncn_icon, "国内出港")) list.add(LeftMenu(Constant.AuthName.DomImp, R.mipmap.gnjg, "国内进港")) list.add(LeftMenu(Constant.AuthName.IntExp, R.mipmap.gjcn_icon, "国际出港")) @@ -210,15 +214,15 @@ class HomeFragment : Fragment() { list.add(LeftMenu(Constant.AuthName.Comprehensive, R.mipmap.zhgl_icon, "综合管理")) /** - * 左侧菜单 权限过滤 - * TODO: 暂时关闭权限筛选,方便开发调试 + * 左侧菜单 权限过滤:仅保留接口下发、且含有二级权限的主菜单 + * auths 结构:{ 主菜单ID: [二级权限串, ...], ... } */ -// getAuthsObj()?.let { -// val authsFilter = list.filter { m -> -// it.getJSONArray(m.id) != null && it.getJSONArray(m.id).size > 0 -// } -// list = authsFilter as ArrayList -// } + getAuthsObj()?.let { authsObj -> + return list.filter { m -> + val arr = authsObj.getJSONArray(m.id) + arr != null && arr.size > 0 + } + } return list } @@ -980,13 +984,14 @@ class HomeFragment : Fragment() { } /** - * 右侧菜单 权限过滤 + * 右侧菜单 权限过滤:仅保留当前主菜单下、接口下发的二级入口 + * 使用集合精确匹配,避免子串误判(如 AppIntExpAssemble 是 AppIntExpAssembleAllocate 的子串) */ - // TODO: 暂时关闭权限筛选 -// val authsFilter = list.filter { m -> -// SharedPreferenceUtil.getString(Constant.Share.authList).contains(m.id) -// } -// list = authsFilter as ArrayList + getAuthsObj()?.let { authsObj -> + val authArr = authsObj.getJSONArray(id) + val authSet = authArr?.map { it.toString() }?.toSet() ?: emptySet() + return list.filter { m -> authSet.contains(m.id) } + } return list } diff --git a/module_base/src/main/java/com/lukouguoji/module_base/LoginActivity.kt b/module_base/src/main/java/com/lukouguoji/module_base/LoginActivity.kt index 1d4de5d..4ce3927 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/LoginActivity.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/LoginActivity.kt @@ -39,7 +39,7 @@ import me.jessyan.autosize.internal.CustomAdapt * ========== 开发调试开关 ========== * TODO: 正式发布前务必设置为 false */ -private const val DEV_AUTO_LOGIN = true // 自动登录开关 +private const val DEV_AUTO_LOGIN = false // 自动登录开关 @Route(path = ARouterConstants.ACTIVITY_URL_LOGIN) class LoginActivity : BaseActivity(), diff --git a/国际出港进港权限对照表.xlsx b/国际出港进港权限对照表.xlsx new file mode 100644 index 0000000..e5d0c1c Binary files /dev/null and b/国际出港进港权限对照表.xlsx differ