Структура разрешений на основе vue (элемент пользовательского интерфейса) + ssm + shiro. Понять, понять, переварить!
введение
голос
В современном мире Java различные ресурсы очень богаты, я должен сказать, от распределенных, сервис-ориентированных, orm, до внешнего управления, разрешений и т. д. В Интернете есть поговорка, что языковая структура слишком повторяется. быстро, я учусь Если ты не двигаешься, почему бы тебе не вернуться и не передвинуть кирпичи, но погода такая жаркая, кирпичи горячие. Это легко программировать, но это немного холодно.

проблемы общения
Второй вопрос на самом деле касается не только людей, но и отношений между машинами и людьми. Менеджер по продукту сказал: «Я хочу сделать экскаватор для приготовления овощей. Экскаватор едет по оптимальному маршруту, как нынешние люди и автомобили». одинаковы, и в то же время они полностью укомплектованы и могут рекомендовать блюда по вкусу хозяина, так что они могут не только поддерживать свои первоначальные функции, но и служить личным помощником для приготовления самых вкусных блюд в ресторане. Самый элегантный способ, не просто ли кулинария?Многим это не сложно.Я считаю,что для открытия экскаватора особых знаний не требуется.Есть и рекомендательные алгоритмы,и нужно пригласить некоторых специалистов в смежных областях.Это не должно быть большой проблемой, но весь процесс более трудоемкий., Интернет такой, всякие реальные проблемы в жизни реализуются с мышлением в Интернете, тогда в чем проблема?Взаимодействие идей, взаимодействие машин и людей. Звучит как шутка, или сюжет фантастического фильма, ну так и есть. Для программистов общение с коллегами, общение с продакт-менеджерами, какой спрос, и как его можно достичь, зависит от подтянутости всей команды.
предположение
Полезно понять принцип, но не повторяйте колесо, не повторяйте колесо, не повторяйте колесо, а лучше идите на гитхаб, чтобы найти базовую подходящую модификацию колеса, и не пишите свои колеса просто так. притворяться, иначе будет очень неудобно.Что касается общения, то надо сказать, что его трудно понять, поэтому он вышел с интерфейсно-ориентированным дизайном и интерфейсно-ориентированным программированием, что более естественно, чем Fat Boy Happy Water .


Другой метод заключается в непосредственном создании экземпляра приложения со всеми маршрутами. Когда пользователь входит в систему и получает разрешение, затем скрывает несанкционированное меню с помощью операций с элементами. В это время пользователь также может вручную ввести адрес для доступа к несанкционированной странице. Поэтому , необходимо добавить хук beforeEach в маршрут, чтобы ограничить доступ к маршрутизации, сам хук маршрутизации повысит определенное давление на производительность, а создание экземпляра, регистрирующего все маршруты, также загрузит избыточные компоненты маршрутизации на внешнем интерфейсе. Эта система использует начальный маршрут для регистрации домашней страницы и страницы входа и получает разрешение после получения токена, а затем создает экземпляр Vue. Код маршрутизации выглядит следующим образом:
const router = new Router({
routes: [
{
path: '/login',
name: "login",
component: LoginView,
meta: { requiresAuth: false }
},{
path: '/index',
redirect: '/',
meta: { requiresAuth: true }
}
]
});
generateIndexRouter();
// 验证token,存在才跳转
router.beforeEach((to, from, next) => {
let token = sessionStorage.getItem('token')
if(to.path === '/') {
if(!token) {
next({
path: '/login',
query: { redirect: to.fullPath }
})
return
}
}
if(to.meta.requiresAuth) {
if(token) {
next()
} else {
next({
path: '/login',
query: { redirect: to.fullPath }
})
}
} else {
next()
}
});
router.afterEach((to, from) => {
// 设置面包屑
let breadCrumbItems = []
let homePageCrumb = {
title: '首页',
to: '/'
}
breadCrumbItems.push(homePageCrumb)
if(to.meta.nameFullPath) {
let fullPathSplit = to.meta.nameFullPath.split('/')
fullPathSplit.forEach(( item, index ) => {
let routerBreadCrumb = {
title: item,
to: (index == fullPathSplit.length - 1 ? to.path : '')
}
breadCrumbItems.push(routerBreadCrumb)
});
}
// 更新到state
router.app.$store.dispatch('setBreadcurmbItems', breadCrumbItems)
})
// 生成首页路由
function generateIndexRouter() {
if (!sessionStorage.routers) {
return
}
let indexRouter = {
path: "/",
name: "/",
component: resolve => require(['@/views/home/index'], resolve),
children: [
...generateChildRouters()
]
}
router.addRoutes([indexRouter])
}
// 生成嵌套路由(子路由)
function generateChildRouters() {
let routers = JSON.parse(sessionStorage.routers)
let childRouters = []
for(let router of routers) {
if(router.code != null) {
let routerProps = JSON.parse(router.properties)
let childRouter = {
path: router.url,
name: router.code,
component: resolve => require(['@/views/' + router.code + '/index'], resolve),
meta: { routerId: router.id, requiresAuth: routerProps.meta.requiresAuth, nameFullPath: routerProps.nameFullPath }
}
childRouters.push(childRouter)
}
}
return childRouters
}
export default router;
Соглашения о форматах внешних и внутренних данных
Поскольку это спокойный стиль, должен быть общий класс, который возвращает статус.Следуя принципу онлайн-открытого исходного кода, класс наследует хэш-карту, чтобы он мог возвращать любые данные.Общие данные - это code.msg.data.Если есть является подкачка, будет добавлена дополнительная подкачка.Другим является data.msg.state(code).token + данные типа подкачки, такие как:
"data": {
"list": null,
"pagebar": {
"page": 1,
"total": 2,
"limit": 10
}
},
"msg": "error",
"state": 0,
"is_redirect": true,
"redirect_url": "http://qq.com",
"token": null
Принимая во внимание более позднее расширение, этот проект использует первый класс, который реализует часто используемые коды состояния сбоя и успеха и их ответы.Имя класса разработано как Result, который находится в zhcc-common и обычно инкапсулируется в ResponseEntity. , вернуться.
Соглашения о внешнем и внутреннем интерфейсе данных
В соответствии с методами get/put/post/delete протокола http соответственно, внутренние разрешения: read/:update/:create/:delete
case "get":
permissionString += ":read";
break;
case "put":
permissionString += ":update";
break;
case "post":
permissionString += ":create";
break;
case "delete":
permissionString += ":delete";
проверочная часть
Используйте com.baidu.unbiz.fluentvalidator.ValidationError вместо hibernateValidator, чтобы снизить нагрузку на серверное программирование. Проверьте непосредственно в контроллере и, наконец, инкапсулируйте его в метод отказа возвращаемого результата.
Дизайн разрешений
Контроль разрешений в основном делится на четыре категории, в основном на основе принципа RBAC. маршруты, ресурсы, роли, пользователи Управляемый уровень маршрута и компонентный уровень
разработка процесса
1. Дизайн разрешений 2. Ненормальный дизайн 3. Словарь и прочее оформление интерфейса 4. Коммуникационный дизайн до и после ==
инструкция
Официальный сайт Vue.js — лучший учебник, официальный сайт vue.js — лучший учебник, официальный сайт vue.js — лучший учебник. Если вы мне не верите, давайте посмотрим!
как пользоваться?
Демонстрация, руководство по началу работы, список API и тест.
- Как использовать демо
- git clone front-end address Выполнить npm run dev Перед этим вам может понадобиться следовать пакетам, от которых зависит npm, затем сначала выполнить npm init, затем npm install и, наконец, выполнить npm run dev или npm run build Вы знаете разницу между два.
- git clone Адрес бэкенда клонируется и что дальше? Измените путь к базе данных, запустите sql для импорта базы данных и, наконец, запустите ее на сервере.Конечно, это этап разработки.В производственной среде вам может понадобиться сервер nginx для развертывания внешнего кода.
- Руководство по началу работы, для такого отличного вы, вероятно, вам это не нужно.
- API и тестирование будут улучшены позже. Пожалуйста, следите за этим документом для получения информации в режиме реального времени.
Пожертвование
Если вы считаете, что это хорошо, вы можете вознаградить кофе, чашка не достаточно, а полчашки в порядке.Если вы пришли и раскошелились, лучше пометить его звездочкой.
Ссылаться на
- Ссылка 1:Интерфейсный дизайн разрешения Vue
- Ссылка 2: csdnQuota.CSDN.net/course/play…
- Ссылка 3: Платформы с открытым исходным кодомgit ee.com/Find Oh Rough Hengli…
- Ссылка 4: официальный сайт vue
- Ссылка 5: контроль разрешений vueGitHub.com/one way tech/…
преднамеренная практика
Уточним, научиться самому не сложно, например, прочитать книгу, научиться пользоваться фреймворком и т. д. Даже если с нуля до мастерства, это не займет много времени и сил, а весь стек умений-это такое накопление по крупицам,те великие боги,которые выглядят торжествующими,все "грязные" за ними.почему ты не можешь?такой быстрый успех,например,21 день на обучение от удаления библиотеки до убегания книг-это очень популярен, на самом деле нет короткого пути, только напоминание: самодисциплина может изменить жизнь, рост заключается в настойчивости и накоплении. Что можно узнать из преднамеренной практики, так это то, что, учась учиться, мы, программисты, независимо от формы, не забываем программировать -> обратная связь -> исправление -> перестраивать обучение. Больше внимания личному блогуhulichao.top, у меня тут вино, хочешь зайти?
У Се, третий мастер, новичок в области больших данных и искусственного интеллекта.
Больше внимания общественному номеру