Web开发中的用户角色权限设计总结

简介:

在Web开发中关于权限管理设计大抵涉及到两个方面:一:功能方面权限设计;二:资源方面权限设计。二者比较来看,功能方面权限的可重用性更高。

1.关于权限:

  • 按照角色权限的最简单的设计

    名称 描述
    用户 不具备管理功能
    管理员 具备管理普通用户的权限
    超级管理员 具备管理管理员的权限


    上面的设计直接将参与系统的用户分为三类角色:用户,管理员,超级管理员。

  • 按照角色权限,粒度划分再小些设计

    名称 权限 描述
    普通用户 普通服务 享有系统有限服务
    VIP用户 高级服务 享有VIP服务



    上面是用户的简单划分示例,通过将用户进行权限划分,来提供不同的服务。

    名称 权限 描述
    产品管理员 管理产品模块 具备产品模块的管理操作权限
    客户管理员 管理客户模块 具备客户模块的管理操作权限



    上面是管理员的简单划分示例,通过将后台管理员进行权限划分,使的每一个管理员角色具备不同的操作权限,并且不同角色的管理员在管理角色上不存在交叉管理,这样系统的管理部分才有可能保存清晰,完整,有效。

    名称 权限 描述
    超级管理员 管理各类管理员 具备最高的管理权限
    系统管理员 管理整个系统,包括管理超级管理员 系统管理员具备操作整个系统的最高权限



    上面是系统级别的管理简单划分示例,一个系统建设完成后应该具备自管理的功能,即:系统环境配置,模块管理,使用系统的干系人管理等都可以通过自身的管理模块完成,而不是人为的修改数据或者系统程序。

  • 按照模块对角色具备的操作权限进行划分,粒度将更细。对于模块层的权限划分使得系统权限管理严格,个角色的智能更加精确,当然系统的设计,实现也相对复杂。

    2.用户-角色-权限的一个物理模型

    设计示例图如下所示:

    104309462.png

说明:

a.用户-用户角色-角色:可以构成一个用户角色权限管理子模块,即1中最简单的设计。

b.模块-模块权限-权限:可以构成一个模块权限管理子模块。注:这里的描述有些欠缺,单独的看待模块部分,应该描述为模块-模块功能-功能更为恰当。

c.将a和b同过角色权限组合在一起就可以构成一个用户-角色-权限的按照功能模块粒度划分的权限管理系统。

3.用户-角色-权限数据库中表之间的关联关系说明:

105731356.png

上述数据库表的关系图中的每一张表不涉及具体的字段内容,所具备的字段都是为了描述各个表之间的关联关系。

实体表:用户表,角色表,权限表,模块表;

中间表:用户角色,角色权限,模块权限表,用来解决多对多问题;

角色权限表:涉及角色具备的权限,该权限是来自模块权限,也就是符合2中的模块权限。

关于角色权限表是用户-角色-权限系统的一个可扩展口。例如:角色权限可以和权限直接关联,或者二者之间添加特定场景的其他表。

4.数据库用例数据,使用用户-角色-权限系统

  • 用户

    111212500.png三个用户(标识列[主键],用户编码,用户名称)

  • 角色

    111330529.png

    四种角色(标识列[主键],角色编码,角色名称)

  • 用户角色

    111516931.png

    用户角色标识列,用户编码,角色编码即构成用户角色中间表。注:实际中一个用户足矣具备多种角色。

  • 模块

    111746736.png

    [模块标识列,模块编码,模块名称,父模块编码,模块URL]

    说明:

    父模块编码:用于模块划分粒度层次标识

    模块URL:用于模块在WBE应用中的访问标识,当然也可以作为他用。

  • 权限

    112411119.png

    权限标识,权限编码,权限名称。

  • 模块权限

    112806887.png

    模块权限标识列,模块编码,权限编码。模块权限表在模块粒度和权限粒度上对模块进行的相应的权限设置,可以简单表述为:具备在某一模块上的某种权限操作。因此将角色和模块权限进行关联将成为角色具备这一粒度层次上的操作权限。

  • 角色权限

    113244594.png

    角色权限标识列,角色编码,模块权限编码


至此,用户,角色,权限的划分就形成了,而且可以通过实际中需要的用户,角色,权限的管理程度,进行简化或者增加表。


5.查询用户编码为400900500的权限


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
     t_account.ACCCODE, t_account.ACCNAME,
     t_role.ROLECODE, t_role.ROLENAME,
     t_module_privilege.MODUELCODE,
   t_module.MODUELCODE, t_module.MODUELNAME,
     t_privilege.PRICODE, t_privilege.PRINAME
FROM
     t_account, t_account_role, t_role, t_role_privilege, t_module_privilege, t_module, t_privilege
WHERE
     t_account_role.ACCCODE=t_account.ACCCODE  AND  t_account_role.ROLECODE=t_role.ROLECODE
AND
     t_account.ACCCODE= "400900500"
AND
     t_role_privilege.ROLECODE=t_role.ROLECODE    AND  t_role_privilege.MPID=t_module_privilege.MPID
AND
     t_module_privilege.MODUELCODE=t_module.MODUELCODE  AND  t_module_privilege.PRICODE=t_privilege.PRICODE

通过面的SQL语句可以查询到400900500用户的权限。


115041959.png


上述查询仅仅说明各表之间的数据关联关系,在实现开发中这样的查询避免使用。


用户,角色,权限的一个很好的参考示例就是Oracle数据库的用户管理机制。Web开发中更多的是涉及到管理用户,管理员,系统管理,模块访问权限,资源访问等问题的处理。




本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1297317,如需转载请自行联系原作者

相关文章
|
3月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
178 3
|
30天前
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南
|
2月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
203 45
|
2月前
|
存储 前端开发 JavaScript
如何在项目中高效地进行 Web 组件化开发
高效地进行 Web 组件化开发需要从多个方面入手,通过明确目标、合理规划、规范开发、加强测试等一系列措施,实现组件的高效管理和利用,从而提高项目的整体开发效率和质量,为用户提供更好的体验。
36 7
|
2月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
|
2月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
44 2
|
2月前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
58 1
|
2月前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
2月前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
74 2
|
3月前
|
设计模式 测试技术 持续交付
开发复杂Web应用程序
【10月更文挑战第3天】开发复杂Web应用程序
47 2