Vue iView Admin 다 차원 제어 권한 단추 표시 (springboot 2. x iview admin vue 전후 단 분리 모델 디자이너 동적 데이터 권한 단추 표시)
단추 권한
사용자 작업 권한 목록 을 데이터 구조의 meta 필드 에 저장 하고 전역 명령 을 등록 합 니 다. 처음 렌 더 링 을 할 때 들 어 오 는 매개 변수 가 현재 경로 페이지 권한 목록 에 있 는 지 판단 합 니 다. 존재 하지 않 으 면 이 노드 를 직접 삭제 합 니 다.
component: "access/access"
icon: "md-lock"
id: "16392767785668608"
level: 2
name: "access_index"
parentId: "16392452747300864"
path: "index"
permTypes: ["add", "edit", "delete"]
title: " "
src/libs/util.js
//
util.initRouterNode = function (routers, data) {
...
//
meta.permTypes = menu.permTypes ? menu.permTypes : null;
...
};
src/libs/hasPermission.js
const hasPermission = {
install (Vue, options) {
Vue.directive('has', {
inserted (el, binding, vnode) {
let permTypes = vnode.context.$route.meta.permTypes;
if (!permTypes.includes(binding.value)) {
el.parentNode.removeChild(el);
}
}
});
}
};
export default hasPermission;
src/main.js
import hasPermission from '@/libs/hasPermission'
Vue.use(hasPermission);
상기 방식 의 장점: 모든 페이지 는 자신 이 가지 고 있 는 권한 만 처리 하고 대량의 권한 이 없 는 데 이 터 는 단점 을 판단 해 야 한다. 동적 경로 에 있 지 않 은 페이지 노드 는 통제 되 지 않 고 해결 방안: 아래 에서 캐릭터 권한 을 사용 하 는 것 을 볼 수 있다.
역할 권한
원 리 는 대체로 같다. 이 방식 은 권한 통 제 를 세분 화 할 수 는 없 지만 전역 적 으로 직접 사용 할 수 있 고 설정 할 필요 가 없다 는 장점 이 있다.
src/views/login.vue
this.setStore("roles", roles);
src/libs/hasRole.js
import { getStore } from './storage';
const hasRole = {
install (Vue, options) {
Vue.directive('hasRole', {
inserted (el, binding) {
let roles = getStore("roles");
if (!roles.includes(binding.value)) {
el.parentNode.removeChild(el);
}
}
});
}
};
export default hasRole;
src/main.js
import hasRole from '@/libs/hasRole'
Vue.use(hasRole);
넓히다
여러 권한 을 사용 하거나 규칙 을 사용 하려 면 아래 코드 를 참고 하여 사용 하 십시오. 작가 가 사용 하지 않 았 기 때문에 필요 한 자체 가입 코드 가 있 습 니 다.
// ,
export const hasPermission = {
install (Vue) {
Vue.directive('hasPermission', {
bind (el, binding, vnode) {
let permTypes = vnode.context.$route.meta.permTypes;
let value = binding.value.split(',')
let flag = true
for (let v of value) {
if (!permTypes.includes(v)) {
flag = false
}
}
if (!flag) {
el.parentNode.removeChild(el)
}
}
})
}
}
// ,
export const hasNoPermission = {
install (Vue) {
Vue.directive('hasNoPermission', {
bind (el, binding, vnode) {
let permTypes = vnode.context.$route.meta.permTypes;
let value = binding.value.split(',')
let flag = true
for (let v of value) {
if (permTypes.includes(v)) {
flag = false
}
}
if (!flag) {
el.parentNode.removeChild(el)
}
}
})
}
}
// ,
import { getStore } from './storage';
export const hasAnyPermission = {
install (Vue) {
Vue.directive('hasAnyPermission', {
bind (el, binding, vnode) {
let permissions = vnode.context.$store.state.account.permissions
let value = binding.value.split(',')
let flag = false
for (let v of value) {
if (permissions.includes(v)) {
flag = true
}
}
if (!flag) {
el.parentNode.removeChild(el)
}
}
})
}
}
// ,
import { getStore } from './storage';
export const hasRole = {
install (Vue) {
Vue.directive('hasRole', {
bind (el, binding, vnode) {
let roles = getStore("roles");
let value = binding.value.split(',')
let flag = true
for (let v of value) {
if (!roles.includes(v)) {
flag = false
}
}
if (!flag) {
el.parentNode.removeChild(el)
}
}
})
}
}
// ,
export const hasAnyRole = {
install (Vue) {
Vue.directive('hasAnyRole', {
bind (el, binding, vnode) {
let roles = getStore("roles");
let value = binding.value.split(',')
let flag = false
for (let v of value) {
if (roles.includes(v)) {
flag = true
}
}
if (!flag) {
el.parentNode.removeChild(el)
}
}
})
}
}
<div v-hasPermission="'add','edit'">XBootdiv>
<div v-hasAnyPermission="'add','edit'">XBootdiv>
<div v-hasRole="'ROLE_ADMIN','ROLE_USER'">XBootdiv>
<div v-hasAnyRole="'ROLE_ADMIN','ROLE_USER'">XBootdiv>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
v-bind를 사용하여 CSS에 대한 Vue3 상태애플리케이션을 더 동적으로 만들기 위해 Vue는 동적 상태를 템플릿 내부의 마크업에 연결할 수 있도록 합니다. 예를 들어 특정 기준이 충족되는 경우에만 요소에 클래스를 적용할 수 있습니다. 그러나 구성 요소 상태가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.