防止用户复制管理员网址进入页面、设置禁用隐藏按钮权限以及防止修改禁用按钮权限

20 篇文章 8 订阅

防止用户复制管理员网址进入页面

Login.vue页面

<script>
import {initDynaminRoutes} from '../router/index.js';
export default {
  name: "Login",
  data() {
    return {
      form: {
        username: "admin",
        password: "admin",
      },
      isloading: false,
      rules: {
        username: [
          {
            required: true,
            message: "请输入用户名",
            trigger: "blur",
          },
          {
            min: 3,
            max: 18,
            message: "长度在 3 到 18 个字符",
            trigger: "blur",
          },
        ],
        password: [
          {
            required: true,
            message: "请输入密码",
            trigger: "blur",
          },
          {
            min: 3,
            max: 18,
            message: "长度在 3 到 18 个字符",
            trigger: "blur",
          },
        ],
      },
    };
  },
  methods: {
    resetForm(formName) {
      this.$refs[formName].resetFields();
    },
    login() {
      this.isloading = true;
      this.$api
        .login({
          username: this.form.username,
          password: this.form.password,
        })
        .then((res) => {
          console.log(res);
          this.$store.commit("setUser", res.data);
          window.sessionStorage.setItem("token", res.data.token);
          this.isloading = false;
          this.$router.push("/");
          // 调用方法
          initDynaminRoutes()
          this.$message({
            message: "恭喜你,登录成功",
            type: "success",
          });
        });
    },
  },
};
</script>

router页面 

import Vue from "vue";
import VueRouter from "vue-router";
import Home from "../views/Home.vue";
import NotFound from "../views/NotFound.vue";
import store from "../store/index.js";
Vue.use(VueRouter);
const one = {
  path: "/menu/one",
  component: () => import("@/views/Page1.vue"),
};
const two = {
  path: "/menu/two",
  component: () => import("@/views/Page1.vue"),
};
const three = {
  path: "/menu/three",
  component: () => import("@/views/Page1.vue"),
};
const four = {
  path: "/menu/four",
  component: () => import("@/views/Page1.vue"),
};
const five = {
  path: "/menu/five",
  component: () => import("@/views/Page1.vue"),
};
// 这里的ruleMapping
const ruleMapping = {
  "/menu/one": one,
  "/menu/two": two,
  "/menu/three": three,
  "/menu/four": four,
  "/menu/five": five,
};
console.log(ruleMapping);
const routes = [
  {
    path: "/",
    name: "Home",
    component: Home,
    redirect: "/menu/one",
    children: [],
  },
  {
    path: "/about",
    name: "About",
    component: () =>
      import(/* webpackChunkName: "about" */ "../views/About.vue"),
  },
  {
    path: "/login",
    name: "Login",
    component: () =>
      import(/* webpackChunkName: "about" */ "../views/Login.vue"),
  },
  {
    path: "*",
    name: "NotFound",
    component: NotFound,
  },
];

const router = new VueRouter({
  routes,
});
router.beforeEach((to, from, next) => {
  if (to.path == "/login") {
    next();
  } else {
    let token = window.sessionStorage.getItem("token");
    if (!token) {
      next("/login");
    } else {
      next();
    }
  }
});
// 动态导出路由
export function initDynaminRoutes() {
  /* console.log(store);
  console.log(router); */
  const rulerouter = router.options.routes;
  console.log(rulerouter);
  console.log(rulerouter[0].children);
  const rightlist = store.state.user.rights;
  console.log(rightlist);
  rightlist.forEach((v) => {
    // console.log(v);
   if (v.children) {
    v.children.forEach(item => {
/*       console.log(item);
      console.log(item.path); */
      if (item.path) {
        // 这里的ruleMapping就是上面创建数组的名称
        const temp = ruleMapping[item.path]
        console.log(temp);
        rulerouter[0].children.push(temp)
        console.log( rulerouter[0].children);
        rulerouter[0].children.forEach(v=>{
          router.addRoute('Home',v)
        })
      }
    })
   }
  })
  router.addRoutes(rulerouter)
}

const originalPush = VueRouter.prototype.push;
// 重写了原型上的push方法,统一的处理了错误信息
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch((err) => err);
};
export default router;

设置禁用隐藏按钮权限

<el-button type="primary" @click="$emit('show')" v-permission="{action:'add',effect:'disabled'}">添加商品</el-button>

import Vue from 'vue'
import router from '@/router/index.js'
Vue.directive('permission',{
	inserted:function(el,binding){
		console.log(el);
		console.log(binding.value.action);
		var action = binding.value.action
		var effect = binding.value.effect
		console.log(router.currentRoute.meta);
		if(router.currentRoute.meta.indexOf(action) === -1){
			if(effect === "disabled"){
				el.disabled = true
				el.classList.add('is-disabled')
			}else {
				el.parentNode.removeChild(el)
			}
		}
	}
}) 

 

 

 一定要刷新一次页面!!!

防止修改禁用按钮权限 

/* resful语法 */
const map = {
	'get':'view',
	'post':'add',
	'put':'edit',
	'delete':'delete'
}
// 添加请求拦截器
axios.interceptors.request.use(function(config) {
	// 在发送请求之前做些什么
	console.log(config);
	var method = map[config.method]
	var currentRoute = router.currentRoute.meta
	console.log(currentRoute);
	if(config.url != '/login'){
		if(currentRoute && currentRoute.indexOf(method) === -1){
			alert('您没有相关权限!')
			return new Promise(function(resolve,reject){
				reject('请求错误')
			})
		}
	}
	return config;
});

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Southern Wind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值