umi框架实现路由视图权限

权限配置过程

  • src/app.tsx的代码会先执行
    首先在app.tsx文件中导出 getInitialState 方法(可以加async)
    就开启了@umijs/piugin-initial-state插件集
    它的返回值是一个对象
export const getInitialState = async () => {
    console.log("getInitialState");
     return {
      role: "",
    }
}

添加本地存储后

export const getInitialState = async () => {
  //   console.log("getInitialState");
  try {
    const userInfo = JSON.parse(localStorage.getItem("userInfo"))
    return userInfo || {
      role: ""
    };
  } catch (error) {
    console.log(error);
    return {
      role: ""
    }
  }
}

  • 在执行src/access.ts
    默认抛出一个函数,它接收到的参数是app.tsx中方法的返回值
    return {变量:布尔值}
export default function (initialState) {
    console.log(initialState);
    // 例如
    return {
        canUser: role === "admin"
    }
}

回到路由文件router.ts给需要控制视图权限的路由添加access属性默认值显示就给返回的那个变量

{
        exact: true,
        name: "用户管理",
        path: "/userMent",
        component: "@/pages/UserMent",
        
        access:"canUser",//以此控制视图是否显示

        icon: "UserOutlined"
    },
  • 与登录状态连接时
    在登录页 获取到useRequest数据后
    使用useModel重新设置access.ts抛出函数的初始值
const history = useHistory()
  const { setInitialState } = useModel("@@initialState")
  const onFinish = async (user:string,pwd:string) => {
    const data = await run({
      name: user,
      password: pwd
    })
    console.log(user,pwd);
    setInitialState(data)
   // 进而进行本地存储或者跳转页面操作
    localStorage.setItem('userInfo', JSON.stringify(data))
    history.push('/')
3I7W4F)A(OQT4`9O_)$YKYW.jpg

面试如果问用户权限怎么配置?

点击登录获取到token和用户信息,然后根据用户信息判断侧边栏是否显示

  • 如何实现 ?通过useModel可以返回一个 setInitialState(data)方法,权限会重新获取初始规则 然后配置路由时结合access实现视图是否显示
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容