后台管理系统

后台管理系统


一、菜单权限业务

超级管理员的页面:首页、权限模块、商品模块
初级管理员:首页
不同的用户、不同角色的任务,项目当中所能操作的、看见的菜单是不一样的。

如何实现菜单的权限?不同的用户所能操作|查看菜单不一样的?

  1. 起始不同的用户(角色),登录的时候会向服务器发请求,服务器会把用户相应的菜单的权限的信息,返回给我们

  2. 我们可以根据服务器返回的数据(信息),可以动态的设置路由,可以根据不同的用户展示不同的菜单。

菜单权限:当用户获取用户信息的时候,服务器会把相应的用户拥有菜单的权限信息返回,需要根据用户身份对比出,当前这个用户需要展示哪些菜单


1.路由模块划分

  • 路由的配置:为什么不同用户登录我们的项目,菜单(路由)都是一样的?
    因为咱们的路由‘死的’,不管你是谁,你能看见的,操作的菜单都是一样的,需要把项目中的路由进行拆分

常量路由:所有用户都可以跳转的路由

// 常量路由:所有用户都可以看到的路由
export const constantRoutes = [
  {
    path: '/login',
    component: () => import('@/views/login/index'),
    hidden: true
  },

  {
    path: '/404',
    component: () => import('@/views/404'),
    hidden: true
  },

  {
    path: '/',
    component: Layout,
    redirect: '/dashboard',
    children: [{
      path: 'dashboard',
      name: 'Dashboard',
      component: () => import('@/views/dashboard/index'),
      meta: { title: '首页', icon: 'dashboard' }
    }]
  },

异步路由:有的用户没有权限跳转的路由

// 异步路由:不同用户需要过滤的路由
export const asyncRoutes = [
  //管理权限
  {
  name: 'Acl',
  path: '/acl',
  component: Layout,
  redirect: '/acl/user/list',
  meta: {
    title: '权限管理',
    icon: 'el-icon-lock'
  },
  children: [
    {
      name: 'User',
      path: 'user/list',
      component: () => import('@/views/acl/user/list'),
      meta: {
        title: '用户管理',
      },
    },
    {
      name: 'Role',
      path: 'role/list',
      component: () => import('@/views/acl/role/list'),
      meta: {
        title: '角色管理',
      },
    },
    {
      name: 'RoleAuth',
      path: 'role/auth/:id',
      component: () => import('@/views/acl/role/roleAuth'),
      meta: {
        activeMenu: '/acl/role/list',
        title: '角色授权',
      },
      hidden: true,
    },
    {
      name: 'Permission',
      path: 'permission/list',
      component: () => import('@/views/acl/permission/list'),
      meta: {
        title: '菜单管理',
      },
    },
  ]
},
// 商品管理
{
  path: '/product',
  component: Layout,
  name: 'Product',
  meta: { title: '商品管理', icon: 'el-icon-goods' },
  children: [
    {
      path: 'trademark',
      name: 'TradeMark',
      component: () => import('@/views/product/tradeMark'),
      meta: { title: '品牌管理' }
    },
    {
      path: 'attr',
      name: 'Attr',
      component: () => import('@/views/product/Attr'),
      meta: { title: '平台属性管理' }
    },
    {
      path: 'spu',
      name: 'Spu',
      component: () => import('@/views/product/Spu'),
      meta: { title: 'Spu管理' }
    },
    {
      path: 'sku',
      name: 'Sku',
      component: () => import('@/views/product/Sku'),
      meta: { title: 'Sku管理' }
    },
  ]
},
];

2.vuex仓库模块开发(数据对比与合并)


将服务器返回的数据中的路由信息与异步路由进行对比出当前用户到底显示哪些异步路由

获得服务器返回的数据

const actions = {
//获取用户信息
  getInfo({ commit, state }) {

    return new Promise((resolve, reject) => {
      getInfo(state.token).then(response => {
        //获取用户信息:返回数据包含:用户名name、用户头像avatar、routes[返回的标志:不同的用户应该展示哪些菜单的标记]、roles(用户角色信息)、buttons【按钮的信息:按钮权限用的标记】
        const { data } = response;
        //vuex存储用户全部的信息
        commit('SET_USERINFO',data);
        commit('SET_RESULTASYNCROUTES',computedAsyncRoutes(cloneDeep(asyncRoutes),data.routes));
        resolve(data)
      }).catch(error => {
        reject(error)
      })
    })
  },

对比数据

//定义一个函数:两个数组进行对比,对比出当前用户到底显示哪些异步路由
 const computedAsyncRoutes = (asyncRoutes,routes)=>{
     //过滤出当前用户【超级管理|普通员工】需要展示的异步路由
    return asyncRoutes.filter(item=>{
         //数组当中没有这个元素返回索引值-1,如果有这个元素返回的索引值一定不是-1 
        if(routes.indexOf(item.name)!=-1){
          //递归:别忘记还有2、3、4、5、6级路由
          if(item.children&&item.children.length){
              item.children = computedAsyncRoutes(item.children,routes);
          }
          return true;
        }
     })
 }

数据的合并

const mutations = {
//最终计算出的异步路由
  SET_RESULTASYNCROUTES:(state,asyncRoutes)=>{
     //vuex保存当前用户的异步路由,注意,一个用户需要展示完成路由:常量、异步、任意路由
     state.resultAsyncRoutes = asyncRoutes;
     //计算出当前用户需要展示所有路由
     state.resultAllRputes = constantRoutes.concat(state.resultAsyncRoutes,anyRoutes);
     //给路由器添加新的路由
      router.addRoutes(state.resultAllRputes)
  }
}

运用到数组的filter、indexOf、concat方法

3.页面的渲染

在这里插入图片描述文件位置
在这里插入图片描述
html代码

```javascript
 <sidebar-item v-for="route in routes" :key="route.path" :item="route" :base-path="route.path" />

计算数据

computed: {
routes() {
      return this.$store.state.user.resultAllRputes;
    },
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java后台管理系统是一个用于管理服务器后台应用程序的软件系统。它通常用于管理数据库、处理用户请求、执行任务、监控系统状态等。 Java后台管理系统通常由以下几个部分组成: 1. **Web应用程序**:Java后台管理系统通常使用Java Web框架(如Spring、Struts、Play等)来构建Web应用程序。这些框架提供了丰富的功能,如MVC(模型-视图-控制器)设计模式、数据库访问、安全性等。 2. **数据库**:后台管理系统通常需要与数据库进行交互,以存储和管理数据。常见的数据库系统包括MySQL、Oracle、PostgreSQL等。 3. **用户认证和授权**:Java后台管理系统需要一种机制来验证用户的身份并控制他们对系统的访问权限。这通常通过使用身份验证和授权机制来实现,如用户名和密码、OAuth等。 4. **任务调度**:Java后台管理系统通常需要一种机制来调度和管理任务。这可以包括定期执行的作业、异步任务等。 5. **监控和管理工具**:Java后台管理系统通常提供一些工具来监控和管理服务器和应用程序的状态。这些工具可以包括性能监控、日志管理、错误跟踪等。 6. **API管理**:Java后台管理系统通常提供一组API,允许其他应用程序与系统进行交互。这些API可以用于创建自定义的管理界面、集成其他系统等。 Java后台管理系统的优势包括: * **可扩展性**:Java是一种灵活的编程语言,可以轻松地适应各种规模和复杂性的系统。 * **安全性和可靠性**:Java具有强大的安全性和可靠性特性,可以确保后台管理系统的稳定性和安全性。 * **社区支持**:Java拥有庞大的开发者社区,这意味着有大量的资源和工具可供使用,以帮助开发和管理后台管理系统。 总之,Java后台管理系统是一个复杂而重要的软件系统,它可以帮助管理管理和监控服务器后台应用程序,确保系统的稳定性和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值