`

程序设计中的权限设计二

SQL 
阅读更多

针对这样的需求,版本一就无能为力了(当然你也可以增加几个功能:比如分类A的新闻起草和分类B的新闻起草,再把这个功能添加到相应的角色里面去,但是这个应该不是我们要得解决方案吧,不过版本二也是基于这个思想来解决的)。

其实比新闻更好的例子是论坛板块的版主。

下面是版本二的解决方案:

 


在版本二的功能表中加入了一个
ResourceType这个字段,这个字段用来表示对某个资源的分类(比如新闻),我们同样来模拟一下(新闻分类AResourceType为:NTA,分类B为:NTB):

功能表:

FunctionID

ResourceType

FunctionName

F1

NTA

起草新闻:分类A

F2

NTA

编辑新闻:分类A

F3

NTA

审核新闻:分类A

F4

NTA

删除新闻:分类A

F1

NTB

起草新闻:分类B

F2

NTB

编辑新闻:分类B

F3

NTB

审核新闻:分类B

F4

NTB

删除新闻:分类B

然后在角色表添加相应的角色,在角色功能表中添加对应的功能。

获取Functions的语句也相应地做变化:

Select FunctionID  + ‘,’ + ResourceType From 角色功能表 Where RoleID In (Select RoleID From 用户角色表 Where UserID=’U1’)

权限的判断也就变成:

Functions.Contain(‘F1,NTA’);

在新添加一个分类的时候,同时也在功能表中增加相应的记录(当然不是在数据库里面直接添加,由和功能相关的函数来添加)。

使用这种解决方案可以简单地对有分类的应用(比如论坛系统)的每个分类实行不同的控制(比如VIP板块,就只能拥有VIP角色的用户才能浏览、发表等,而其他板块只要是注册用户就可以使用了)。

在实际应用中FunctionID并不是随便的一个字符串,而是进行了编码,其编码中包含了模块ID以及能够体现出父子关系,举个例子来说:对于论坛系统,我们给它一个模块ID”30”,论坛的功能我们先分成2类,一类是管理类(比如删除帖子),一类是使用类(比如发帖、回帖、浏览帖子等),给管理类一个编码:01,使用类一个编码:02,我们就对FunctionID进行如下的编码:

300101:删除帖子

300201:发帖

300202:回帖

300203:浏览帖子

对于资源(比如某个板块1,板块的ID为:01),我们可以组合出如下的Functions(当然这个组合你也可以不用逗号分隔,用其他的组合方式也可以,不过不要产生歧义):

300101,01:板块1删除帖子的功能

300201,01:板块1发帖的功能

……

    对于RoleID也是采用的编码方式,也能体现角色的父子关系,也可以实现角色功能的继承等(当然获取角色功能列表的SQL语句就不是现在这么简单了)。在我现在的应用里面没有实现角色的继承(虽然角色的编码体现出了角色的父子关系)。

分享到:
评论

相关推荐

    应用程序权限设计

    应用程序权限设计是软件开发中一个至关重要的环节,它涉及到如何有效地控制用户对系统资源的访问。权限设计的主要目的是确保只有经过授权的用户才能执行特定的操作,以保护系统的安全性和完整性。以下将详细介绍几种...

    应用程序权限设计-权限的控制程度不同的设计方案

    #### 二、基于角色的权限设计 **概念**:基于角色的权限设计(Role-Based Access Control, RBAC)是一种常见的权限管理方法,它通过赋予用户不同的角色来控制其访问权限。每个角色都与一组预定义的操作权限关联,...

    WEB程序设计中的权限设计与实现

    【权限设计与实现】在B/S(Browser/Server)系统中,权限设计是至关重要的,因为与C/S(Client/Server)系统相比,B/S架构的开放性使得任何拥有浏览器的用户都可能尝试访问系统功能。为了防止未经授权的访问,B/S...

    应用程序系统中权限的设计——数据库设计

    2. **基于操作的权限设计**:这种设计每个操作都对应数据库中的一条记录,用户对特定操作的权限也存储在数据库中。然而,随着操作数量的增加,`UserAction`表可能变得非常庞大,可能导致性能问题。 3. **基于角色和...

    delphi 7 程序设计毕业论文

    1.1.2 面向对象的程序设计 2 1.2 数据库概述 3 1.3课题来源及系统简介 6 1.3.1 课题来源 6 1.3.2 系统介绍 7 第2章 系统的总体方案设计 8 2.1 软件开发工具的选择 8 2.2 Delphi编程语言 9 2.3系统总体方案 9 2.3.1 ...

    Java面向对象程序设计(第二版)

    不过,我可以基于《Java面向对象程序设计(第二版)》这个标题和标签,来详细说明Java面向对象程序设计中可能涵盖的知识点。 在深入介绍之前,首先需要明确面向对象程序设计(OOP)是一种编程范式,它使用“对象”...

    Unix程序设计详细PPT和复习资料

    4. **文件操作**:Unix系统中一切皆文件,文件的创建、打开、读写、关闭等操作是程序设计的基础。学习包括文件描述符、文件权限、符号链接、硬链接等概念。 5. **进程和线程**:Unix中的进程是执行中的程序,而线程...

    wince程序设计教程

    二、Wince程序设计基础 1. 开发环境:Visual Studio或eMbedded Visual C++是常用的Wince应用程序开发工具。它们提供了集成的开发环境,包括项目管理、代码编辑、编译、调试等功能。 2. API和SDK:Windows CE提供了...

    Windows程序设计教程.zip

    线程管理是Windows程序设计中的重要一环,包括创建、同步和销毁线程。此外,事件驱动编程模型也是Windows程序设计的一大特点,程序通过响应用户的输入、系统事件或者其他线程的信号来进行处理。 语法结构是程序设计...

    自考07026网络应用程序设计真题三套,需要的可以下载

    2. **脚本语言**:JavaScript是Web开发中的重要工具,用于实现交互性和动态效果。学习者需要熟悉JavaScript语法,学会DOM操作、AJAX异步通信以及常用的JavaScript库和框架,如jQuery、React或Vue.js。 3. **服务器...

    FTP服务程序设计

    在本文中,我们将深入探讨FTP服务程序设计的关键概念、技术要点以及C#实现的步骤。 首先,FTP是一种应用层协议,用于在Internet上进行文件的上传和下载。它基于TCP/IP协议族,提供了一种可靠的、面向连接的数据传输...

    计算机程序设计竞赛题目

    ### 计算机程序设计竞赛知识点解析 #### 一、前端网页设计竞赛 ##### 技术要点 **HTML + CSS + JavaScript**:参赛者需掌握这些基础网页开发技术,其中HTML用于构建网页结构,CSS负责样式设计,JavaScript则用于...

    用户权限设计 (2)(1)(1).docx

    在本文中,我们将详细探讨用户权限设计的三个方面:程序设计、数据库设计和接口设计。 1. 程序设计: 程序设计主要关注用户、角色、权限和组的管理。 - **用户管理**:包括用户列表、新增(编辑)用户、用户授权...

    吉林大学windows程序设计

    进程管理是Windows程序设计中的核心内容。一个进程可以包含一个或多个线程,每个线程执行不同的任务。通过学习如何创建、管理和销毁进程,以及如何在进程间通信(IPC),我们可以实现多任务并行处理,提高程序的运行...

    实验六 综合程序设计.doc

    * 本实验中,CPerson类和CStudent类都是典型的面向对象程序设计的示例,它们封装了数据和行为,并提供了公共接口来访问类的成员。 知识点五:Visual C++的使用 --------------------------------- * Visual C++是...

    java用户权限设计

    在Java编程领域,权限设计是构建安全应用程序的关键组成部分。它涉及到如何管理用户访问资源的权限,确保只有授权的用户或系统组件能够执行特定的操作。在这个主题中,"java用户权限设计"涵盖了多个重要知识点,包括...

    汇编语言程序设计(第二版)王爽作品

    尽管描述中提到“清晰度还可以”,但根据读者反馈及书籍内容本身来看,《汇编语言程序设计(第二版)》依然是一本值得学习和参考的重要资料。 #### 作者介绍 王爽教授是中国计算机科学领域的著名学者之一,在计算机...

    用户权限设计方案

    用户权限设计方案 用户权限设计方案是指通过建立用户、角色和权限等数据库表,并且建立之间的关系来实现用户认证管理的设计方案。该方案的主要目的是为了提供一种具有较强可扩展性的用户认证管理系统,能够满足不同...

    Oracle程序设计

    Oracle程序设计是数据库管理和开发领域中的重要组成部分,它涉及到如何使用PL/SQL语言来创建、管理、优化和维护Oracle数据库中的应用程序。Oracle是全球广泛使用的数据库管理系统,尤其在企业级应用中占据主导地位。...

Global site tag (gtag.js) - Google Analytics