小爱ADMIN系列文章二用Vuecli3mockjs-实现后台管理权限和三级菜单功能

最近完成了我的小爱ADMIN后台管理系统基本功能,同时进行了页面整体布局和样式的全新改版。新增了系统权限功能的实现,同时觉得后台系统所有的菜单都左置,会限制菜单的扩展,因此我改进了三级菜单的显示。 效果演示地址github地址权限功能的实现权限路由思路:根据用户登录的roles信息与路由中配置的roles信息进行比较过滤,生成可以访问的路由表,并通过router.addRoutes(store.getters.addRouters)动态添加可访问权限路由表,从而实现左侧和顶栏菜单的展示。 权限功能的实现步骤:1.给相应的菜单设置默认的roles信息在router/index.js中,给相应的菜单设置默认的roles信息;如下: 给"权限设置"菜单设置的权限为: { path: '/permission', name: 'permission', meta: { title: '权限设置', roles: ['admin', 'editor'] //不同的角色都可以看到 }}给其子菜单"页面权限",设置权限为: { path: 'page', name: 'pagePer', meta: { title: '页面权限', roles: ['admin'] //只有"admin"可以看到该菜单 }, component: () => import('@/page/permission/page'),}给其子菜单"按钮权限"设置权限为: { path: 'directive', name: 'directivePer', meta: { title: '按钮权限', roles:['editor'] //只有"editor"可以看到该菜单 }, component: () => import('@/page/permission/directive'),}2.通过router.beforeEach()进行路由过滤和权限拦截;代码如下: function hasPermission(roles, permissionRoles) { if (roles.indexOf('admin') >= 0) return true if (!permissionRoles) return true return roles.some(role => permissionRoles.indexOf(role) >= 0)}const whiteList = ['/login'] // 不重定向白名单router.beforeEach((to, from, next) => { NProgress.start() // 设置浏览器头部标题 const browserHeaderTitle = to.meta.title store.commit('SET_BROWSERHEADERTITLE', { browserHeaderTitle: browserHeaderTitle }) // 点击登录时,拿到了token并存入了cookie,保证页面刷新时,始终可以拿到token if (getToken('Token')) { if(to.path === '/login') { next({ path: '/' }) NProgress.done() } else { // 用户登录成功之后,每次点击路由都进行了角色的判断; if (store.getters.roles.length === 0) { let token = getToken('Token'); getUserInfo({"token":token}).then().then(res => { // 根据token拉取用户信息 let userList = res.data.userList; store.commit("SET_ROLES",userList.roles); store.commit("SET_NAME",userList.name); store.commit("SET_AVATAR",userList.avatar); store.dispatch('GenerateRoutes', { "roles":userList.roles }).then(() => { // 根据roles权限生成可访问的路由表 router.addRoutes(store.getters.addRouters) // 动态添加可访问权限路由表 next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 }) }).catch((err) => { store.dispatch('LogOut').then(() => { Message.error(err || 'Verification failed, please login again') next({ path: '/' }) }) }) } else { // 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓ if (hasPermission(store.getters.roles, to.meta.roles)) { next()// } else { next({ path: '/401', replace: true, query: { noGoBack: true }}) } } } } else { if (whiteList.indexOf(to.path) !== -1) { // 点击退出时,会定位到这里 next() } else { next('/login') NProgress.done() } }})router.afterEach(() => { NProgress.done() // 结束Progress setTimeout(() => { const browserHeaderTitle = store.getters.browserHeaderTitle setTitle(browserHeaderTitle) }, 0)})本系统权限逻辑分析1、路由对象区分权限路由对象和非权限路由对象;初始化时,将非权限路由对象赋值给Router;同时设置权限路由中的meta对象,如:meta:{roles:['admin','editor']},表示该roles所拥有的路由权限; ...

August 28, 2019 · 4 min · jiezi

f-admin——基于Laravel框架开发的基础权限后台系统

f-admin基础权限后台❤️ 本项目 GitHub / Gitee(码云),目前已在公司产品应用,运行在数个客户服务器内。f-admin基础权限后台是一套基于Laravel框架开发的系统,不需要开发者重复不必要的工作,就可以实现后台功能的快速开发,其主要特点包括:[x] 集成 Composer,安装使用方便。[x] 用户管理可以配置自己的权限。[x] 角色管理可以配置用户及权限。[x] 权限控制可以精确到某一个请求的控制。[x] 菜单可以设置自己的图标,可以控制哪些角色可以看到。[x] 日志查看搜索。[x] 严格的前端后端输入验证。[x] pc端和手机端都能适配。[ ] 其它优化,持续进行中 ……f-admin的运行环境要求PHP5.4以上;laravel框架要求为5.4。线上DEMO f-admin 你也可以用手机扫下二维码查看手机效果 导航效果预览- 首页- 用户管理- 角色管理- 权限管理- 菜单管理- 日志管理安装步骤- 1.获取代码- 2.安装依赖- 3.生成APP_KEY- 4.修改env配置- 5.数据库迁移- 6.访问首页环境配置- 1.windows- 2.linux(apache)- 3.linux(nginx)感谢效果预览(pc/mobile)首页用户管理角色管理权限管理菜单管理日志管理安装步骤1.获取代码新建一个文件夹,进入该文件夹,利用git等工具输入以下命令:git init git clone https://github.com/fangzesheng/f-admin.git2.安装依赖composer install 3.生成APP_KEYcp .env.example .envphp artisan key:generate 4.修改 .env 配置DB_CONNECTION=mysqlDB_HOST=your_hostDB_PORT=your_portDB_DATABASE=your_dbDB_USERNAME=your_usernameDB_PASSWORD=your_pwdCACHE_DRIVER=array //将file改为array5.数据库迁移php artisan migratecomposer dump-autoloadphp artisan db:seed如果在执行php artisan migrate增加表操作出现字段长度过长错误时,则可能是因为mysql版本低于5.5.3,解决方法:a.升级mysqlb.手动配置迁移命令migrate生成的默认字符串长度,在appProvidersAppServiceProvider中调用一下方法来实现配置记得先将新建数据库里面的表清空!!!use Illuminate\Support\Facades\Schema; public function boot(){ Schema::defaultStringLength(191);}6.访问首页访问自己的配置好的域名 用户名:admin 密码:f123456环境配置(仅供参考)1.windows<VirtualHost *:80> DocumentRoot E:\test\public ServerName www.test.com <Directory “E:\test\public”> AllowOverride All order deny,allow Require all granted </Directory></VirtualHost>2.linux(apache)<VirtualHost *:80> DocumentRoot /data/wwwroot/default/f-admin/public ServerName www.fang99.cc <Directory “/data/wwwroot/default/f-admin/public”> AllowOverride All order deny,allow Require all granted </Directory></VirtualHost>3.linux(nginx)server { listen 8088; server_name demo.fang99.cc; location / { index index.php index.html; root /var/www/f-admin/public/; try_files $uri $uri/ /index.php?$query_string; } location ~ .php$ { root /var/www/f-admin/public/; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; include /etc/nginx/fastcgi.conf; }}感谢layerlaravel如果你觉得这个开源项目对你有用,欢迎star你懂的!谢谢:) ...

February 26, 2019 · 1 min · jiezi

265. To B 端 Web 页面上线前 checklist

表格[ ] 数值类字段:右对齐[ ] 非数值类字段,左对齐[ ] 数值类字段:千分位[ ] 小数类字段:保留两位小数[ ] 分页数据是否正确:offset、limit[ ] 降序、逆序是否正确(如果是后端分页,需要检查跨页的排序是否正确)[ ] 搜索需要支持大小写过滤样式可点击区域,鼠标样式为:cursor: pointer;, 小手的样式Chart饼图中的Legend 按照占比排序(可降序或者逆序)下拉菜单页面中同时最多有一个下拉菜单可以展开数据前端点击 Action,发起请求,观察 API 是否与 Postman 中的数据,是否一致(如果存在分页,至少需要测试到两页以后的数据)过滤、搜索表格、下拉菜单 Filter 支持忽略大小写错误处理500、502、504 之类的错误是否处理处理 500 之类的错误的同时,需要将前一次搜索的数据清空掉。防止看到错误的数据

February 20, 2019 · 1 min · jiezi