使用mySQL的三层web应用权限结构
首先,我很抱歉这个问题问了这么长时间,感谢您花时间阅读 我们目前正在开发一个我更喜欢描述的基于web的平台,它包含许多应用程序,并且遇到了权限问题。这是我们业务的内部应用程序,不是公共的,因此我们有独特的需求 我们不能使用严格的基于组的权限系统,因为它太笼统,限制性太强,一些员工需要访问多个应用程序、应用程序中的多个部门(有些人可能称为组)以及每个部门中的少数功能 我们还需要能够动态显示数据,因为我们正在为平台开发许多应用程序。我们需要能够在数据库中注册信息,然后它将填充相应的复选框,并在用户有访问权限时选中这些复选框,如果用户没有访问该应用程序的权限,则将其保留为空,部门或职能 出于这些原因,我们需要3层权限,包括使用mySQL的三层web应用权限结构,mysql,web-applications,structure,Mysql,Web Applications,Structure,首先,我很抱歉这个问题问了这么长时间,感谢您花时间阅读 我们目前正在开发一个我更喜欢描述的基于web的平台,它包含许多应用程序,并且遇到了权限问题。这是我们业务的内部应用程序,不是公共的,因此我们有独特的需求 我们不能使用严格的基于组的权限系统,因为它太笼统,限制性太强,一些员工需要访问多个应用程序、应用程序中的多个部门(有些人可能称为组)以及每个部门中的少数功能 我们还需要能够动态显示数据,因为我们正在为平台开发许多应用程序。我们需要能够在数据库中注册信息,然后它将填充相应的复选框,并在用户有
app_id (primary AI) | perm_id (int) | app_name | app_code | app_location | tab_location | access_key
应用程序权限注册表:它保存每个应用程序的每个权限列表,无论它是应用程序、部门还是职能部门(在下面的访问类型下定义)
特定用户权限:它拥有与应用程序、部门和职能相关的特定权限
permission_id (primary AI) | perm_id (varchar) | app_permission_id | app_id | user_id | access_status | function_code
分配权限时会出现问题,因为当我们进入功能级别时,我们发现mySQL查询需要太具体,才能获取用户访问信息,而我们无法获取该部门的完整功能列表,在左联接
中没有返回任何NULL
值,它们应该返回的位置-这是由于一个特定字段,该字段在多个被联接的表中有一个通用名称,但在每个表中有不同的数据。我们指定希望从每个查询返回的所有字段,但由于某些原因,这1个字段不断出现,并且加入了错误的数据
因此,我正在考虑实施以下结构:
应用程序注册:保存具有URI和导航系统引用的所有应用程序的列表
app_id (primary AI) | app_name | app_uri | app_tab
部门注册:保存所有部门的列表以及与应用程序的关系
dept_id (primary AI) | app_id | dept_name
function_id (primary AI) | dept_id | function_name | function_description
功能注册:要保存所有功能的列表以及与部门的关系,“部门注册”中的部门与应用程序相关
dept_id (primary AI) | app_id | dept_name
function_id (primary AI) | dept_id | function_name | function_description
特定用户权限:要保存用户可以执行的所有功能的列表,该列表与功能注册表关联,该注册表将自身关联到与应用程序注册表相关的部门注册表
permission_id (primary AI) | user_id (index) | function_id | permission_status (int - 0 = not allowed access | 1 = allowed access)
编辑开始
我刚刚意识到,如上图所示,特定用户权限表中的某些内容不太正确,我没有考虑应用程序或部门权限,那么这看起来如何
我已将function\u id
更改为permit\u item
以保留项目的id,然后添加到permit\u type
中,以定义用户是否有权访问该项目的应用程序、部门或职能
permission_id (primary AI) | user_id (index) | permit_item | permit_type | permission_status (int - 0 = not allowed access | 1 = allowed access)
编辑结束
例如,从这里我们可以在一个查询中进行一些连接(只是为了演示这个概念,我意识到这不是正确的查询,也不是在生产环境中编写它的最佳方式)
这将为我提供一个简化的联接权限表,该表关联所有功能、部门和应用程序,然后列出用户可以访问的应用程序
permission_id (primary AI) | user_id (index) | permit_item | permit_type | permission_status (int - 0 = not allowed access | 1 = allowed access)
但我需要公正的观察者的意见,而不是投入感情的数据库设计师和他的朋友
有没有什么我忽略了或看得太重的东西
有没有其他更好的结构,我们可以尝试,你可以想出处理这些数据
我真的很感谢大家的帮助,再次为这个问题的长度感到抱歉 你提出的解决方案对我来说似乎最有意义
关于你的LEFT JOIN
工作异常的问题,我建议你使用一种简单的技巧。我们只是在每个表及其字段前面加上唯一的值。例如,表:
苹果:[标识、品牌、有机]
品牌:[身份证,姓名]
将成为:
苹果应用程序:[应用程序id,应用程序品牌,应用程序有机]
brd_品牌:[brd_id,brd_名称]
这可以完成两件事。每个字段保证在整个系统中都是唯一的(因此应该解决所有的JOIN
问题),并且数据之间的关系也可以非常快速地查看和解决
就我的两分钱。谢谢你的两分钱和小费@Donnie,小费很有道理,现在让我们看看我怎么能用它侮辱DB设计师!呵呵