`

如何设计权限系统

阅读更多

下边我们将以几个案例来,帮助理解权限系统的概念和设计,这些案例包括:

  • linux操作系统中的权限系统
  • 微信朋友圈中的权限
  • django中的权限系统

近期工作中遇到一个系统设计中关于权限的复杂问题(层级组织),本文是我自己学习权限系统以及对此思考的一个小结

linux中的权限系统

关于权限系统,我们以linux为切入点,它为大多技术人员所熟悉。我们重点关注其中的概念,而对实现细节不做深究

linux是个多用户操作系统,这每个用户有自己的工作空间(home目录)。就好比多人住在一套公寓里,各自有自己的房间。

在linux中 一切皆文件 ,linux鼓励使用文本文件,人和机器能理解文本文件,成为人和机器进行交流的最好途径。在linux中权限问题往往最终会落到文件的权限上。

如果我们把文件视为一种资源。那么我们会发现 权限往往围绕这些概念:

  • 用户
  • 用户组(群组)
  • 资源
  • 权限类型

如果你对上述概念不大熟悉,推荐阅读鸟哥的 Linux 的文件权限与目录配置

上班几个概念中,鸟哥对用户组的解释很棒(意义和功能),推荐一读

总结来说,Linux一般将文件可存取的身份分为三个类别,分别是 owner/group/others,且三种身份各有 read/write/execute 权限

我们举个本地文件的例子

 

 

我们在此引用鸟哥文章里的这张图

上述信息表示:文件 /tmp/test.txt 是文件( - ),文件拥有者(wwj)的权限为 rw- (读写),文件拥有群组(wheel)的权限为 r-- (读),其他人的权限为 r-- (读)

如果你想改变文件属性与权限,可以使用:

  • chgrp :改变文件所属群组
  • chown :改变文件拥有者
  • chmod :改变文件的权限

有了群组/资源/用户这些概念,之后我们就可以这样表达权限了:

  • A用户有资源B的可读权限(r)
  • 群组X有资源Y的可读权限(r)

朋友圈中的分组与权限

在用户/群组/资源/权限类型的时间下,我们也很好理解微信朋友圈的分组功能了

你半夜回家发了一条: 今天大学聚会很开心 ,为了让没空到现场的同学也看到聚会情况,附上了聚会照片,却不想被诟病为 天天晒吃的 ,于是决定这条消息只对 大学同学组 可见,这样只有在 大学同学组(群组)里的同学(用户)才能看到(可读权限)聚会消息(资源)

RBAC

如果我进一步抽象,我们便总结出了基于角色的访问控制(Role-Based Access Control,RBAC)

Who对What进行How操作

我可以看到这种模式:

大学同学组里的同学(who)才能看到(how)聚会消息(what)

RBAC认为权限授权实际上是Who、What、How的问题

在RBAC模型中,who、what、how构成了访问权限三元组,也就是 Who对What进行How的操作 ,各个要素的含义如下:

  • Who:权限的拥用者或主体(如User、Group、Role)
  • What:权限针对的对象或资源(Resource)。
  • How:具体的权限

特点

模型中概念与实际系统紧密对应。RBAC模型中的角色、用户和许可权等概念都是实际系统实际存在的实体,便于设计者建立现存的或待建系统的RBAC模型

分治的思路

  • 我们要分割这些问题来讨论(分析的思路/分治)
    • 用户与角色的指派
    • 角色与权限的指派
    • 为定义角色的继承 进行的角色与角色的指派。

上述这些活动都要求把用户和权限联系起来。多数情况下它们最好由不同的管理员或管理角色来做。对角色指派权限是典型的应用管理者的职责(类似元角色)

概念解释

  • Group:用户组,权限分配的单位与载体。组可以包括组(以实现 权限的继承 )(适合用来处理层级问题),也可以包含用户,组内用户继承组的权限。User与Group是多对多的关系。Group可以层次化,以满足不同层级权限控制的要求。 (漂亮解决了我的问题)
    • 部门Department或组织Organization,都可以对应到Group
  • Role:Role和User关系的左右两边都是Many-to-Many关系,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,角色配置成其完成任务所需要的最小的权限集
  • 许可表(PERMISSIONS)包括许可标识、许可名称、受控对象、操作标识。许可表给出了受控对象与操作算子的对应关系。*

其他笔记

  • RBAC都是基于关系模型
  • 资源是受控对象
  • RBAC模型支持数据抽象原则和继承概念
  • RBAC模型没有提供操作顺序控制机制

Django中的权限机制

这部分主要参考 Django权限机制的实现

如果你对Django熟悉(不熟悉的话参考你所用web框架的权限机制),可以把这部分理解为以Django为例,解释如何把权限概念用于web项目

在web应用中,权限机制能够约束用户行为,控制页面的显示内容(想想你的朋友圈和各种论坛的会员机制),也能使API更加安全和灵活(django-rest-framework中)

Django中用 user , group 和 permission 完成了权限机制(和linux很像),这些概念,我们在前文中阐述清楚了,这个权限机制是将属于model的某个permission赋予user或group,可以理解为全局的权限(ps:如果你需要更细分的权限机制,可以试试: django-guardian )

Django的权限项

Django用permission(如前文说的许可表)对象存储权限项(How),每个model默认都有三个permission,即add model, change model和delete model,在admin中你可以看到,当然我们也可以手动添加其他权限项,不过值得注意的是权限是针对model的,而不是instance的!

为一个用户添加权限,既可以在view里做(编码),也可以由管理员(Role)在admin里做(不需要编码)

在模板中使用

当前登录用户的权限存储在模板变量 {{ perms }} 中

分享到:
评论

相关推荐

    权限管理系统设计方案

    - **系统权限模块**:包含了以上各个管理部分的详细功能结构,如组权限管理中的用户管理、角色管理、权限设置和权限总览等功能。 4. **界面总体设计** - **界面布局**:在组权限管理界面中,提供了查看和编辑组的...

    权限系统设计思路与设计方案

    权限系统设计是软件开发中的关键组成部分,主要用于控制不同用户对系统资源的访问和操作。本文主要探讨基于用户、角色、权限的设计思路,并提供一种实现方案。 首先,理解基本概念: 1. **权限**:权限定义了用户...

    吉日权限系统4.2源码

    《吉日权限系统4.2源码》是一个专为IT专业人士设计的权限管理系统,它提供了高效、安全且灵活的权限控制方案。这个系统的源码开放,使得开发者可以深入理解其内部工作原理,对其进行定制化开发或者二次创新。下面将...

    基于DDD领域驱动设计通用后台权限系统开发

    **基于DDD领域驱动设计通用后台权限系统开发** 领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法,强调以业务领域为中心进行系统设计,将复杂的业务逻辑转化为清晰的模型。在“基于DDD领域驱动...

    权限系统需求

    在IT行业中,权限系统是构建安全、高效应用的关键组成部分,特别是在企业级系统中。权限管理系统主要负责控制...理解并合理设计权限系统,不仅可以保障系统的安全,还能提升用户体验,是IT系统设计中不可或缺的一环。

    系统中角色与权限的划分实例

    设计权限系统时,数据库结构的设计是核心。在示例中,包括了三个实体表:权限表(action)、管理组表(groupmanager)和人员表(master)。它们之间存在多对多关系,通过两个映射表——权限映射表(actiongroup)和...

    java系统权限管理设计

    "java系统权限管理设计" java系统权限管理设计是指在java系统中实现业务系统中的用户权限管理。权限管理是指对系统操作的权限控制,确保只有经过授权的用户可以访问系统的相关功能。 在设计java系统权限管理时,...

    权限系统设计

    权限系统设计是构建安全、高效应用的关键组成部分,它主要用于控制不同用户或角色对资源的访问。基于角色的用户权限设计(Role-Based Access Control, RBAC)是一种常见的权限管理模型,它将用户与权限通过角色进行...

    Android应用获取系统权限,修改系统时间

    首先,理解Android权限系统至关重要。Android权限分为正常权限和危险权限。正常权限对用户隐私和设备安全的影响较小,应用在安装时会自动获得。而危险权限涉及用户的隐私或可能影响其他应用的运行,需要在运行时由...

    通用权限管理系统的设计与实现

    这种方式可以简化管理流程,因为管理员不需要为每个用户单独设置权限,而只需将用户分配到相应的角色中。 文章描述提到了在Java EE平台上设计的基于角色分配的通用权限管理系统,表明了该系统使用Java EE技术栈。...

    基于部门和角色的权限管理系统的设计与实现

    ### 基于部门和角色的权限管理系统的设计与实现 #### 概述 在现代企业的信息化建设中,权限管理作为保障信息安全、规范操作流程的重要环节,其重要性日益凸显。传统的权限管理方式往往依赖于静态的角色分配,缺乏...

    c#通用版权限管理系统

    主要功能有:权限管理、角色管理、部门管理、用户管理、公司管理、模块管理、系统设置。适用 OA、财务、人力等办公软件系统 的二次开发,以关键字(Key)的方式来定义系统的权限,使系统权限分配更加贴合企业需求。...

    系统权限设计详解.doc

    2. **权限系统的可扩展性**: - 系统的权限管理模块应具备高度可扩展性,能够轻松集成到任何需要权限控制的系统中,就像一个可重用的组件。这样避免了在每次开发新系统时都需要重复设计权限管理功能。 3. **功能...

    系统管理权限设计

    ### 系统管理权限设计详解 #### 一、引言 在现代企业级应用系统中,权限管理是一项至关重要的功能。特别是在基于浏览器/服务器(B/S)架构的应用中,由于客户端浏览器的高度普及性和开放性,确保只有经过授权的...

    银行员工权限管理系统C++

    《银行员工权限管理系统C++详解》 在信息技术日益发展的今天,银行员工权限管理系统的构建显得尤为重要,它确保了金融机构的安全性和高效运作。本项目以C++编程语言为工具,实现了一个基于控制台的银行员工权限管理...

    通用权限系统设计说明书

    通用权限系统设计旨在确保不同职责的用户在操作系统时拥有适当的操作权限,提高管理效率并确保系统安全性。在大型企业业务系统中,权限管理是至关重要的,因为它允许管理员批量分配权限,避免了为每个员工单独设置...

    系统管理权限设计文档

    理解权限的基本类型和它们如何组合以定义更复杂的访问模式是设计权限系统的基础。 2. **角色与权限**:角色是一组预定义的权限集合,代表了某一类用户的职责和功能需求。通过角色分配,可以方便地管理和调整大量...

    通用数据权限管理系统设计

    ### 通用数据权限管理系统设计详解 #### 一、引言 在现代企业的信息化管理中,权限管理成为确保数据安全和合理使用的关键环节。一个高效、灵活的通用数据权限管理系统不仅能够提升企业的运营效率,还能更好地保护...

    xp系统下 文件夹设置权限

    "xp系统下文件夹设置权限" XP 系统下文件夹设置权限是指在 XP 系统中,通过组来管理权限,以便更好地控制文件夹的访问权限。这种方法可以让管理员更方便地管理文件夹的权限,以确保文件夹的安全。 在 XP 系统中,...

    asp.net+Web+mvc4.0 EasyUI 最新 权限管理系统源码教程

    1. **MVC4权限设计简要说明.doc** - 这份文档可能会概述在MVC4框架下设计权限系统的基本概念和步骤,包括角色、权限分配、访问控制列表(ACL)等。 2. **管理账户密码.txt** - 可能介绍了如何在系统中创建、修改和...

Global site tag (gtag.js) - Google Analytics