--- name: 权限功能开发 description: This skill should be used when developing permission-related features in the UniApp property management mini-program. It provides guidance on admin info fetching, permission checking, role validation, and integrating permission controls into components. --- # 权限功能开发 物业小程序已集成权限管理功能,参考 PC 端 `admin/src/directive/permission` 实现。提供便捷的权限校验方式,用于控制组件或功能入口的显示隐藏。 ## 相关文件 ``` app/ ├── api/ │ └── property.js # 管理员信息接口 ├── config/ │ └── cache.js # 缓存常量 ├── store/ │ ├── modules/ │ │ └── app.js # 状态管理 │ └── getters.js # 数据获取 ├── utils/ │ └── auth/ │ └── permission.js # 权限校验工具 └── pages/users/login/index.vue # 登录页(已集成) ``` ## 核心概念 ### 管理员信息结构 ```javascript { id: 1, // 管理员ID account: "admin", // 账号 realName: "超管", // 真实姓名 roles: "1", // 角色标识 permissionsList: ["*:*:*"], // 权限列表 phone: "11111111111", // 手机号 status: true // 状态 } ``` ### 权限标识规则 - `*:*:*` - 超管权限,拥有所有权限 - `system:user:add` - 系统管理-用户-新增 - `system:user:edit` - 系统管理-用户-编辑 ## Store 使用 ### Getters ```javascript import { mapGetters } from 'vuex'; export default { computed: { ...mapGetters([ 'adminInfo', // 管理员完整信息 'permissions', // 权限列表 'roles', // 角色列表 'isSuperAdmin' // 是否超管 ]) } }; ``` ### Actions ```javascript // 获取管理员信息 this.$store.dispatch('ADMIN_INFO').then(res => console.log(res)); // 登录后自动获取(已在登录流程中集成) this.$store.dispatch('LOGIN_ADMIN_INFO'); ``` ## 权限校验工具 文件位置:`app/utils/auth/permission.js` ### 引入方式 ```javascript import { checkPermi, checkRole, isSuperAdmin, getPermissions, getRoles, getAdminInfo } from '@/utils/auth/permission.js'; ``` ### 方法说明 | 方法 | 说明 | 示例 | |------|------|------| | `checkPermi(value)` | 权限校验 | `checkPermi('system:user:add')` | | `checkRole(value)` | 角色校验 | `checkRole('admin')` | | `isSuperAdmin()` | 判断超管 | `isSuperAdmin()` | | `getPermissions()` | 获取权限列表 | `getPermissions()` | | `getAdminInfo()` | 获取管理员信息 | `getAdminInfo()` | ## 使用示例 ### 示例1:v-if 控制显示 ```vue ``` ### 示例2:computed 便捷调用 ```vue ``` ### 示例3:多个权限任一匹配 ```vue ``` ### 示例4:权限指令封装 ```vue ``` ## 与登录流程集成 登录成功后自动获取管理员信息(已在 `app/pages/users/login/index.vue` 集成): ```javascript this.$store.commit("SETUID", data.uid); getUserInfo().then(res => { this.$store.commit("UPDATE_USERINFO", res.data); this.$store.dispatch('LOGIN_ADMIN_INFO'); // ✅ 自动获取管理员信息 }); ``` ## 退出登录清理 退出登录时自动清理管理员信息(已在 `app/store/modules/app.js` 的 LOGOUT mutation 中集成)。 ## 注意事项 1. **权限标识大小写敏感** - 权限标识严格区分大小写 2. **超管权限** - 拥有 `*:*:*` 权限的用户拥有所有权限 3. **登录检查** - 使用权限前确保用户已登录 4. **缓存持久化** - 管理员信息会缓存到本地Storage