การควบคุมการอนุญาต Vue
ระบบแบ็คเอนด์สำหรับการจัดการสิทธิ์ผู้ใช้ฟรอนต์เอนด์การเข้าสู่ระบบแบบรวมที่พัฒนาบน vue
# install node+git please
# install dependencies
$ npm install / cnpm install
# serve with hot reload at localhost:8060
$ npm run dev
# build for production with minification
$ npm run build
แนวคิดพื้นฐาน
ส่วนหน้าทำการควบคุมการอนุญาตซึ่งไม่มีอะไรมากไปกว่าการส่งข้อมูลไปยังพื้นหลัง ฉันได้เห็นแล้วว่าโปรเจ็กต์ส่วนใหญ่มีแนวคิดเกี่ยวกับบทบาท ของบทบาทที่ต้องแยกออกจากกันนั้นถูกเสนอขึ้นมาโดยไม่ได้ตั้งใจ ที่จริงแล้ว ส่วนหน้าจะดูเฉพาะข้อมูลและแยกสิทธิ์เท่านั้น เพื่อแสดงให้ผู้ใช้เห็น
หลังจากที่ vue-cli เริ่มต้นโปรเจ็กต์แล้ว จะประกอบด้วยส่วนประกอบโครงกระดูกแบบโมดูลาร์: หน้าแรกล็อกอิน + หน้าแรก แถบด้านข้างส่วนหัว และเนื้อหาธุรกิจสามารถวางไว้ในเนื้อหา Hoem ได้
VPC เหมาะสำหรับการเข้าสู่ระบบแบบรวมศูนย์ของหลายโครงการ โทเค็นที่ถูกต้องที่ส่งคืนหลังจากการเข้าสู่ระบบสำเร็จในหน้าเข้าสู่ระบบจะดำเนินการในขั้นตอนที่สองเพื่อรับข้อมูลผู้ใช้ ในคอมโพเนนต์รูท App.vue เนื่องจาก Vue เป็นแนวคิดโฟลว์ทางเดียว การเข้าสู่ระบบในฐานะองค์ประกอบย่อยของแอป จึงต้อง $emit ไปยังแอปหลังจากเข้าสู่ระบบสำเร็จและดำเนินการโทรกลับเพื่อรับข้อมูลผู้ใช้
ดังที่ได้กล่าวไว้ข้างต้น โปรเจ็กต์นี้ใช้ข้อมูลจำลองแบบง่าย กฎข้อบังคับด้านข้อมูลแบ็คเอนด์ใช้โปรโตคอล RestFul เพื่อจำลองผู้ใช้หลายรายที่มีข้อมูลประจำตัวที่แตกต่างกัน ผ่าน flyio โปรดจำไว้ว่านี่เป็นครั้งแรกหลังจากเพิ่มลงในหน้าเข้าสู่ระบบแล้วคุณจะต้องเพิ่มโทเค็นสำหรับการเรียกอินเทอร์เฟซแต่ละครั้งซึ่งสามารถทำได้ในเครื่องสกัดกั้น flyio
ส่งคืนอาร์เรย์การอนุญาตบนหน้าแอปผ่าน fullPath แบบเรียกซ้ำ การดำเนินการกำหนดเส้นทางในเครื่องทั้งหมดได้รับเส้นทางที่มีประสิทธิภาพของผู้ใช้และบันทึกไว้ใน Vuex
ในแถบด้านข้างสำหรับลูป เส้นทางที่มีประสิทธิภาพที่จัดเก็บไว้ใน vuex จะปรากฏขึ้น และส่วนประกอบ Home จะแสดงขึ้นเพื่อแสดงเนื้อหาเฉพาะของเส้นทาง
│
├─build
│ build.js
│ check-versions.js
│ utils.js
│ vue-loader.conf.js
│ webpack.base.conf.js
│ webpack.dev.conf.js
│ webpack.prod.conf.js
│
├─config
│ dev.env.js
│ index.js
│ prod.env.js
│
├─src
│ │ 404.vue
│ │ App.vue // 根组件
│ │ bus.js // EventBus 适用于兄弟组件 通信
│ │ dave.js // canvas 效果
│ │ globar.js // webpack 全局注册ui组件
│ │ main.js // 项目入口
│ │ tools.js // 插件
│ │
│ ├─api
│ │ axios.js
│ │ common.js // 基本接口
│ │ request.js // flyio 拦截器
│ │ weather.js // 天气接口
│ │
│ ├─assets
│ │ │ logo.png
│ │ │
│ │ └─theme-dave // 自定义主题
│ │
│ ├─components // 主要组件
│ │ ├─common
│ │ │ Header.vue
│ │ │ Home.vue
│ │ │ Login.vue
│ │ │ SideBar.vue
│ │ │
│ │ ├─render // render 渲染组件 适用多条件渲染
│ │ │ btn-render.vue
│ │ │
│ │ ├─ui
│ │ │ baseButton.vue // 基于element-ui btn ui组件 可层叠复用
│ │ │
│ │ └─view
│ │ 403.vue
│ │ 404.vue
│ │ allocation.vue
│ │ render.vue
│ │ watch.vue
│ │
│ ├─router // 本地所有路由
│ │ fullPath.js
│ │ index.js // 基本路由
│ │
│ └─store // 状态管理 全局变量
│ actions.js
│ getters.js
│ index.js
│ mutations.js
│ state.js
│
│ .babelrc
│ .editorconfig
│ .eslintignore
│ .eslintrc.js // 基于airbnb-base 个人配置的代码规则
│ .gitignore
│ .postcssrc.js
│ index.html
│ package-lock.json
│ package.json
│ README.md
< router-view @login =" login " @clearData =" clearData " > </ router-view >
รหัสเป็นไปตามวัตถุประสงค์ของทางเข้าเดียวและทางออกเดียว
clearData ( ) {
if ( this . $route . path === '/login' ) {
delete request . config . headers [ 'Authorization' ] ;
localStorage . removeItem ( 'token' ) ;
this . $store . dispatch ( 'CLEAR_STORE' ) ;
}
}
การตอบสนองการสกัดกั้นทั่วโลกของ Flyio จะข้ามกลับไปที่หน้าเข้าสู่ระบบตราบใดที่ผู้ใช้ที่ไม่ถูกต้องเข้าถึงเพจและเรียกรหัสสถานะความล้มเหลวของอินเทอร์เฟซและส่งกลับ 401
if ( err . response . status === 401 ) {
window . location . href = '/#/login' ;
}
alias: {
'vue$' : 'vue/dist/vue.esm.js' ,
'@' : resolve ( 'src' ) ,
'flyio' : 'flyio/dist/npm/fly'
}
สิ่งประดิษฐ์ webpack need.context
externals: {
vue : 'Vue' ,
'element-ui' : 'ElementUI' ,
nprogress : 'NProgress' ,
jquery : 'window.$'
}
สำหรับรายละเอียด กรุณาเยี่ยมชมเว็บไซต์อย่างเป็นทางการของ Travis CI หมายเหตุ:
การวิเคราะห์การใช้งานการสื่อสารคอมโพเนนต์ Vue
1.Vuex: โหมดการจัดการสถานะ การจัดการพื้นที่เก็บข้อมูลแบบรวมศูนย์ของสถานะของส่วนประกอบทั้งหมดของแอปพลิเคชัน และกฎที่เกี่ยวข้องเพื่อให้แน่ใจว่าสถานะเปลี่ยนแปลงไปในลักษณะที่คาดเดาได้ 2.EventBus: การสื่อสารของส่วนประกอบที่ไม่ใช่ระดับบนสุดและระดับรองใช้ศูนย์เหตุการณ์เพื่อ อนุญาตส่วนประกอบ การสร้างกรณีการสื่อสารโดยอิสระ: ฉันควรทำอย่างไร เมื่อฉันเปลี่ยนค่าแอตทริบิวต์ตัวแปรในส่วนประกอบส่วนหัวในโปรเจ็กต์นี้ และต้องการให้ส่วนประกอบแถบด้านข้างและหน้าแรกตอบสนองต่อการเปลี่ยนแปลง 3. การวิเคราะห์: Vuex ทำหน้าที่จัดการตัวแปรส่วนกลาง ซึ่งไม่ใช่แบบอ่านอย่างเดียว ซึ่งสามารถอ่านได้ เปลี่ยนแปลงได้ และตรวจจับได้ : คุณลักษณะข้อมูลและคุณลักษณะตัวเข้าถึง แบบแรก: [Configurable], [[Enumerable], [Writable], [Value] Configurable, enumerable, overridable value โดยปกติแล้ว object literal จะสร้าง object var person = { name: "dave" } นั่นคือสิ่งที่แอตทริบิวต์ข้อมูลเปลี่ยนแปลงและอ่านเป็นเพียงค่าของวัตถุและคุณสมบัติตัวเข้าถึงหลัง [Configurable]], [[Enumerable]], [[Get]], [[Set] ใน JavaScript เราใช้ Object .defineProperty เพื่อกำหนดการเข้าถึง หากต้องการรับ this.person ใน Vue แอ็ตทริบิวต์ของอุปกรณ์คือการเรียกเมธอด get เพื่อตั้งค่า ซึ่งเป็นเมธอด set Vue มีแผนผังข้อมูลของตัวเอง โดยผ่านแอ็ตทริบิวต์ accessor ที่ใช้การติดตามการพึ่งพา นอกเหนือจาก Vuex EventBus แล้ว Vue.prototype.xx และ this.$root และตัวแปรส่วนประกอบการดำเนินการ localStorage ในเครื่องไม่มีฟังก์ชัน watch
4. สรุป: Vue.prototype.xx, this.$root สามารถอ่านและเปลี่ยนแปลงได้เท่านั้น คุณสามารถแก้ไขและอ่านบนต้นแบบ Vue ได้ แต่ไม่สามารถรับชมได้ Vue.prototype.xx สามารถเขียนตัวแปรส่วนกลางสำหรับการสอบเทียบและการตรวจสอบตามค่าเริ่มต้น ค่าต่างๆ ฯลฯ ดำเนินการบน localStorage เช่นกัน สามารถอ่านการตั้งค่าได้ บางคนบอกว่าคุณสามารถใช้ addEventListener เพื่อตรวจสอบพื้นที่เก็บข้อมูลได้ แต่คุณไม่ได้คาดหวังที่จะทำสิ่งนี้ในเลเยอร์ Vue vuex เราต้องการให้ตัวแปรสามารถคาดเดาได้ จากนั้นจึงดำเนินการโทรกลับ หากคุณคิดว่าคุณกำลังประสบปัญหา เพียงใช้ส่วนประกอบพี่น้องของ EventBus เพื่อสื่อสาร จากนั้น $emit จะทริกเกอร์การโทรกลับ $on
จุดเน้นของโปรเจ็กต์นี้ไม่ได้อยู่ที่ความต้องการส่วนประกอบพื้นหลังที่หลากหลาย แต่อยู่ที่แนวคิดของการควบคุมการกำหนดเส้นทางการอนุญาต มันเป็นเพียงการสร้างโครงกระดูกเพื่อสรุปงานของคุณ ในภายหลัง ส่วนประกอบที่ห่อหุ้มเพิ่มเติมจะถูกเพิ่มเข้าไปในโปรเจ็กต์เพื่อสร้าง "โครงการ" ที่สำคัญและแข็งแกร่งยิ่งขึ้น