Предисловие: Эти вещи о разрешениях! ! !
Для разрешений на маршрутизацию, пожалуйста, обратитесь к тому, что написал этот великий бог, и это очень исчерпывающе ==>Рука об руку, вы попадете на задний план с vue series 2 (разрешение на вход)
Идеи:
- Логин: После того, как пользователь заполнит учетную запись и пароль, он проверит правильность с сервером.После того, как проверка будет пройдена, сервер вернет токен.Статус входа пользователя), интерфейс будет тянуть интерфейс user_info на основе токен для получения подробной информации о пользователе (например, разрешения пользователя, имя пользователя и т. д.).
- Проверка разрешения: получите роль, соответствующую пользователю, с помощью токена, настройте инструкцию и получите btnPermissions(Примечание: meta.btnPermissions — это массив разрешений кнопок, настроенный в таблице маршрутизации.), а затем определить, есть ли роль в массиве btnPermissions, если нет, удалить DOM кнопки.
Разрешения кнопок также можно оценить по v-if, но если страниц слишком много, каждая страница должна получить роль разрешений пользователя и мета.btnPermissions в таблице маршрутизации, а затем сделать выводы, что немного хлопотно, только пользовательские инструкции. Эту команду необходимо добавить к кнопке разрешения.
Без лишних слов, давайте перейдем к коду...
Конфигурация маршрутизации:
path: '/permission',
component: Layout,
name: '权限测试',
meta: { btnPermissions: ['admin','supper','normal'] }, //页面需要的权限
children: [
{
path: 'supper',
component: _import('system/supper'),
name: '权限测试页',
meta: { btnPermissions: ['admin','supper'] } //页面需要的权限
},
{
path: 'normal',
component: _import('system/normal'),
name: '权限测试页',
meta: { btnPermissions: ['admin'] } //页面需要的权限
}
]
Пользовательская директива:
import Vue from 'vue'
/**权限指令**/
const has = Vue.directive('has', {
bind: function (el, binding, vnode) {
// 获取页面按钮权限
let btnPermissionsArr = [];
if(binding.value){
// 如果指令传值,获取指令参数,根据指令参数和当前登录人按钮权限做比较。
btnPermissionsArr = Array.of(binding.value);
}else{
// 否则获取路由中的参数,根据路由的btnPermissionsArr和当前登录人按钮权限做比较。
btnPermissionsArr = vnode.context.$route.meta.btnPermissions;
}
if (!Vue.prototype.$_has(btnPermissionsArr)) {
el.parentNode.removeChild(el);
}
}
});
// 权限检查方法
Vue.prototype.$_has = function (value) {
let isExist = false;
// 获取用户按钮权限
let btnPermissionsStr = sessionStorage.getItem("btnPermissions");
if (btnPermissionsStr == undefined || btnPermissionsStr == null) {
return false;
}
if (value.indexOf(btnPermissionsStr) > -1) {
isExist = true;
}
return isExist;
};
export {has}
Затем импортируйте файл в файл main.js.
import has from './public/js/btnPermissions.js';
Кнопке на странице нужно только добавить v-has
<el-button @click='editClick' type="primary" v-has>编辑</el-button>
Заключение:
Разрешения требуют сочетания внешнего и внутреннего интерфейса, внешний интерфейс должен контролироваться в максимально возможной степени, а серверная часть должна оценивать больше. Помните: никогда не доверяйте пользовательскому вводу!
В приведенном выше есть недостатки, добро пожаловать, чтобы дать больше советов в области комментариев! ! !
Спасибо великим богам в области комментариев за их дружеские предложения, которые были приняты. Эта статья была обновлена (2019-12-09), еще раз спасибо!