Icarus 权限体系详解:从游客到管理员的 7 级角色是如何设计的
Icarus 权限体系详解从游客到管理员的 7 级角色是如何设计的【免费下载链接】Icarus️ An opensource community/forum project write with python3 aiohttp and vue.js. 一个开源的社区程序临时测试站https://t.myrpg.cn项目地址: https://gitcode.com/gh_mirrors/ic/IcarusIcarus 是一个使用 Python3 aiohttp 与 Vue.js 编写的开源社区论坛程序它的权限体系设计堪称小而美的典范通过 7 级角色层层叠加配合字段级权限控制实现了从游客到管理员的完整权限管理。无论你是想自建社区、学习论坛权限设计还是打算二次开发理解 Icarus 的权限体系都会让你事半功倍。本文带你逐级拆解这套角色的设计思路与实现原理。权限体系的核心设计字段级权限控制Icarus 的权限体系不局限于能不能访问某个页面而是精细到数据表的每个字段。它把权限动作抽象为四种基础操作QUERY参与查询条件READ读取字段值CREATE创建时写入UPDATE更新字段值allow_delete允许删除记录每个角色都通过TablePerm声明哪些表、哪些字段、允许哪些动作。这种设计的最大好处是普通用户永远读不到管理字段即使前端绕过界面直接调用 API后端也会拦截安全性从数据层就得到了保障。7 级角色全景图级别角色源码文件核心能力1游客 visitorr10_vistor.py浏览帖子、百科、板块注册账号2封禁用户 banned_userr11_banned_user.py仅能查看个人信息不能发帖3普通用户 normal_userr30_normal_user.py发帖、评论、上传、修改个人资料4Wiki 编辑 wiki_editorr31_wiki_editor.py在普通用户基础上可创建和编辑百科词条5版主 board_moderator用户模型中的is_board_moderator字段管理特定板块的帖子6超级用户 super_userr40_super_user.py管理板块、审核帖子、编辑用户资料7管理员 adminr50_admin.py拥有全部权限包括用户分组管理逐级拆解每一级角色能做什么1. 游客只读的观察者 ️游客是权限体系的地基。在 r10_vistor.py 中可以看到游客对大部分字段只有READ和QUERY权限唯一开放CREATE的是注册相关的email、phone、nickname字段——这正好对应注册这个动作。2. 封禁用户被限制的违规者 被封禁的用户通过based_onvisitor继承游客权限能看到的比游客还少——基本只剩下自己的昵称、分组等基本信息无法进行任何写操作。这是论坛处罚机制的落地实现。3. 普通用户社区的主力军 ✍️普通用户是社区活跃度的核心。在 r30_normal_user.py 中Topic表的title、content、board_id都开放了CREATE和UPDATE意味着可以发帖、改帖Comment表开放了创建评论的能力还能上传文件、接收通知。值得注意的是普通用户对帖子的UPDATE权限实际是只能改自己的这种行级约束由业务层进一步校验。4. Wiki 编辑知识库的守护者 Wiki 编辑在普通用户基础上增加了对 WikiArticle 的完整增删改查权限可以创建和编辑百科词条。社区的知识沉淀就靠这一层角色来维护。5. 版主板块的秩序管理者 ️版主不是一个独立的 RoleDefine 文件而是通过用户模型中的is_board_moderator布尔字段动态赋予见 user_model.py。这种权限字段的设计让角色的授予非常灵活无需新建角色即可为任意用户添加管理能力。6. 超级用户全局的管理者 ⚙️超级用户超版在 r40_super_user.py 中拥有对Topic、Board、User、WikiArticle的全面管理权限可以创建板块、修改帖子状态、调整用户分组、授予 Wiki 编辑和版主身份。User.password字段也开放了UPDATE方便重置密码。7. 管理员权限的顶端 管理员在 r50_admin.py 中只追加了一项能力管理User.group分组字段支持删除用户。但别小看这一行——通过修改分组管理员可以决定任何用户的角色等级形成完整的权限闭环。角色继承机制用 based_on 织成权限网络Icarus 的角色设计最精妙的地方在于继承机制。每个角色通过based_on声明父角色visitor ← banned_user ← inactive_user ← normal_user ← wiki_editor ↑ normal_user ← super_user ← admin低级别角色的所有权限会自动传递给高级别角色高级别角色只需声明新增的部分。在 roles/init.py 中角色还被划分为三组ordinary_roles普通角色游客、封禁、未激活、普通用户、Wiki 编辑admin_roles管理角色Wiki 编辑、超级用户root_roles根角色管理员这种分组在 API 层被用于区分操作是否属于管理行为进而写入操作日志方便审计追踪。多角色叠加与主角色判定一个用户可能同时拥有多个角色例如普通用户 Wiki 编辑 版主。在 user_model.py 中roles属性按权限从低到高返回所有角色列表main_role则取其中最高的一级作为主角色。前端页面、API 日志都用主角色来展示用户身份管理后台也因此能一目了然地识别用户等级。上手体验部署一套带完整权限的社区想亲自体验这套权限体系克隆项目即可git clone https://gitcode.com/gh_mirrors/ic/Icarus后端角色定义集中在backend/crud/roles/目录新增一个角色只需要三步写一个RoleDefine、用based_on指定父角色、在 crud.py 中注册。整个权限系统的代码量不到 300 行却撑起了完整的论坛运营体系非常值得学习参考。总结Icarus 的 7 级权限体系用字段级控制 角色继承 多角色叠加三个设计优雅地解决了社区程序的权限难题。从游客到管理员每一级都在上一级的基础上做加法权限边界清晰、扩展容易。如果你想深入了解社区论坛的权限设计或者需要一个开箱即用的社区程序Icarus 的这套方案会给你不少启发。【免费下载链接】Icarus️ An opensource community/forum project write with python3 aiohttp and vue.js. 一个开源的社区程序临时测试站https://t.myrpg.cn项目地址: https://gitcode.com/gh_mirrors/ic/Icarus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考