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,如需转载请自行联系原作者

相关文章
|
20天前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
|
9天前
|
关系型数据库 MySQL
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
|
2天前
|
前端开发 JavaScript Java
Java与Web开发的结合:JSP与Servlet
Java与Web开发的结合:JSP与Servlet
7 0
|
2天前
|
存储 程序员 API
python web开发示例详解
python web开发示例详解
12 0
|
3天前
|
XML 前端开发 JavaScript
CSR(客户端渲染)和AJAX在Web开发中各自扮演不同的角色
【5月更文挑战第8天】CSR(客户端渲染)与AJAX在Web开发中各司其职。CSR提供初始HTML框架,通过JavaScript在浏览器端获取并渲染数据,提升交互性和响应速度。AJAX则实现页面局部更新,如实时搜索,不刷新页面即可获取数据。CSR可能因DOM操作多而引发性能问题,但可优化解决;AJAX适合频繁交互场景,提高响应性。两者在不同需求下各有优势,需按项目选择适用技术。
12 4
|
3天前
|
前端开发 搜索推荐 安全
AJAX和CSR(客户端渲染)是Web开发中常用的两种技术
【5月更文挑战第8天】AJAX提升用户体验,减轻服务器压力,但对搜索引擎不友好且增加开发复杂度,易引发安全问题。CSR提供快速响应和交互性,改善用户体验,但首屏加载慢,搜索引擎支持不足,同样面临安全挑战。两者各有适用场景,需按项目需求选择。
9 0
|
4天前
|
前端开发 JavaScript 开发者
新一代前端框架:革命性的Web开发利器
传统的前端框架在满足日益复杂的Web开发需求上逐渐显露出局限性,而新一代前端框架的出现,以其革命性的设计和功能,重新定义了Web开发的标准。本文将介绍这些新一代前端框架的特点和优势,并探讨它们在实际项目中的应用。
|
6天前
|
安全 测试技术 PHP
掌握现代Web开发:PHP 8的新特性与最佳实践
【5月更文挑战第5天】 在当今快速发展的网络世界中,PHP作为一种流行的服务器端脚本语言,持续地演化着。最新的PHP 8版本引入了一系列令人兴奋的新特性和性能改进,为开发者提供了更加强大和灵活的工具。本文将深入探讨PHP 8中的新特性,包括联合类型、名称参数、匹配表达式等,并分享一些最佳实践,帮助开发者提高代码质量,优化性能,并确保安全性。通过这些实用技巧和示例,您将能够构建更高效、更安全的PHP应用程序。
|
10天前
|
开发框架 JavaScript 前端开发
【JavaScript 与 TypeScript 技术专栏】TypeScript 在 Web 开发中的前沿应用
【4月更文挑战第30天】TypeScript在Web开发中日益重要,以其强大的类型系统提升代码质量,支持组件化开发,与React、Vue、Angular等框架良好集成。在大型项目管理中,TypeScript助于代码组织和优化,提高团队协作效率。此外,它提升开发体验,提供智能提示和错误检测。众多成功案例证明其前沿应用,未来将在Web开发领域持续发挥关键作用。