Permix项目实例创建与权限管理指南
2025-06-24 12:20:50作者:乔或婵
什么是Permix实例
Permix实例是整个权限管理系统的核心入口点,它负责处理所有权限检查请求。在Permix项目中,每个应用通常只需要一个主实例,这个实例会贯穿整个应用的权限检查流程。
创建Permix实例
要创建一个Permix实例,我们需要使用createPermix函数:
import { createPermix } from 'permix'
const permix = createPermix<{
post: {
action: 'create' | 'edit'
}
}>()
TypeScript类型支持
Permix在设计时就充分考虑了类型安全,通过TypeScript的泛型系统提供了强大的类型检查和自动补全功能。
1. 定义动作类型
在创建实例时,我们需要为每个实体定义可能的操作类型:
const permix = createPermix<{
post: {
action: 'create' | 'edit' | 'delete' // 定义文章实体的操作类型
},
user: {
action: 'view' | 'update' // 定义用户实体的操作类型
}
}>()
2. 实体数据类型定义(推荐)
为了获得更好的类型安全,建议为每个实体定义数据类型:
interface Post {
id: string
author: string
content: string
isPublished: boolean
}
const permix = createPermix<{
post: {
dataType: Post // 指定文章实体的数据类型
action: 'create' | 'edit'
}
}>()
这样在编写权限规则时,可以获得完整的类型提示和检查。
3. 分离权限定义
对于大型项目,建议将权限定义与实例创建分离:
import type { PermixDefinition } from 'permix'
// 单独定义权限结构
type AppPermissions = PermixDefinition<{
post: {
dataType: Post
action: 'create' | 'edit' | 'publish'
}
}>
// 创建实例时使用定义好的类型
const permix = createPermix<AppPermissions>()
JavaScript使用方式
即使不使用TypeScript,Permix也能正常工作:
const permix = createPermix()
permix.setup({
post: {
create: true,
edit: (post) => post.author === currentUser.id
}
})
初始化权限规则
Permix支持在创建实例时直接初始化权限规则:
const permix = createPermix<{
post: {
action: 'create' | 'edit'
}
}>({
post: {
create: true, // 允许创建文章
edit: false // 默认禁止编辑文章
}
})
这种方式特别适合以下场景:
- 权限规则在应用启动时就已知
- 不需要异步加载权限
- 需要立即进行权限检查
最佳实践建议
- 始终使用泛型:即使使用JavaScript,也建议添加类型定义以获得更好的开发体验
- 合理组织权限结构:按业务模块划分权限实体
- 考虑数据敏感性:对于敏感操作,建议使用函数式权限检查
- 性能考虑:对于复杂权限逻辑,考虑使用memoization优化
常见问题解答
Q: 为什么我的权限检查没有类型提示?
A: 请确保正确设置了泛型类型,特别是dataType的定义。
Q: 能否动态修改权限结构?
A: Permix的权限结构在创建实例时就固定了,但具体的规则可以通过setup方法动态更新。
Q: 如何处理异步权限检查? A: Permix本身不直接支持异步权限检查,但可以在规则函数中使用Promise,然后在业务代码中处理异步逻辑。
通过本文的介绍,你应该已经掌握了如何在Permix项目中创建和管理权限实例。合理使用这些功能,可以构建出既安全又易于维护的权限系统。
登录后查看全文
热门项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0152- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
LongCat-Video-Avatar-1.5最新开源LongCat-Video-Avatar 1.5 版本,这是一款经过升级的开源框架,专注于音频驱动人物视频生成的极致实证优化与生产级就绪能力。该版本在 LongCat-Video 基础模型之上构建,可生成高度稳定的商用级虚拟人视频,支持音频-文本转视频(AT2V)、音频-文本-图像转视频(ATI2V)以及视频续播等原生任务,并能无缝兼容单流与多流音频输入。00
auto-devAutoDev 是一个 AI 驱动的辅助编程插件。AutoDev 支持一键生成测试、代码、提交信息等,还能够与您的需求管理系统(例如Jira、Trello、Github Issue 等)直接对接。 在IDE 中,您只需简单点击,AutoDev 会根据您的需求自动为您生成代码。Kotlin03
Intern-S2-PreviewIntern-S2-Preview,这是一款高效的350亿参数科学多模态基础模型。除了常规的参数与数据规模扩展外,Intern-S2-Preview探索了任务扩展:通过提升科学任务的难度、多样性与覆盖范围,进一步释放模型能力。Python00
skillhubopenJiuwen 生态的 Skill 托管与分发开源方案,支持自建与可选 ClawHub 兼容。Python0112
项目优选
收起
暂无描述
Dockerfile
733
4.75 K
Ascend Extension for PyTorch
Python
618
795
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
433
395
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.01 K
1.01 K
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed.
Get Started
Rust
1.18 K
152
deepin linux kernel
C
29
16
华为昇腾面向大规模分布式训练的多模态大模型套件,支撑多模态生成、多模态理解。
Python
145
237
暂无简介
Dart
983
252
昇腾LLM分布式训练框架
Python
166
198
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.68 K
989