Postgresql SQL数据库设计-管理实体上的读写用户权限
我想强制用户读取和写入文件夹和文件实体的权限 读是指选择,写是指插入或更新 我不确定如何对此进行建模,我想了解实现以下要求的适当方法: 公司应具有(或不具有)读取文件夹及其相关文件的权限。 用户应具有(或不具有)读取其公司具有权限的文件夹的权限,并具有(或不具有)写入文件的权限 意思是阅读是公司范围内的权限,而写作是用户范围内的权限Postgresql SQL数据库设计-管理实体上的读写用户权限,postgresql,database-design,Postgresql,Database Design,我想强制用户读取和写入文件夹和文件实体的权限 读是指选择,写是指插入或更新 我不确定如何对此进行建模,我想了解实现以下要求的适当方法: 公司应具有(或不具有)读取文件夹及其相关文件的权限。 用户应具有(或不具有)读取其公司具有权限的文件夹的权限,并具有(或不具有)写入文件的权限 意思是阅读是公司范围内的权限,而写作是用户范围内的权限 编辑 我正在努力解决的问题是文件夹和文件的层次结构 根据当前的要求,我可以在应用程序级别管理权限,这样安全性就不必在数据库级别,但如果是这样,据我所知,我需要向表
编辑 我正在努力解决的问题是文件夹和文件的层次结构 根据当前的要求,我可以在应用程序级别管理权限,这样安全性就不必在数据库级别,但如果是这样,据我所知,我需要向表中添加更多信息-列或连接表,用于
读卡器和写卡器
什么是适当的方法-数据库或应用程序级别的安全性
如果是在应用程序级别,设计中应该做哪些调整来处理层次结构
这些是我目前拥有的实体:
CREATE TABLE "company" (
"id" SERIAL PRIMARY KEY NOT NULL,
"name" varchar (50) NOT NULL
)
CREATE TABLE "user" (
"id" SERIAL PRIMARY KEY NOT NULL,
"company_id" integer NOT NULL REFERENCES "company"(id),
"full_name" varchar (50) NOT NULL,
"email" varchar (50) UNIQUE NOT NULL,
"password_hash" varchar NOT NULL
)
CREATE TABLE "project" (
"id" SERIAL PRIMARY KEY NOT NULL,
"name" varchar (50) NOT NULL
)
CREATE TABLE "folder" (
"id" SERIAL PRIMARY KEY NOT NULL,
"name" varchar (50) NOT NULL,
"project_id" NOT NULL REFERENCES "project"(id)
)
CREATE TABLE "file" (
"id" SERIAL PRIMARY KEY NOT NULL,
"name" varchar (50) NOT NULL,
"folder_id" NOT NULL REFERENCES "folder"(id)
)
CREATE TABLE "project_company" (
"id" SERIAL NOT NULL,
"project_id" integer NOT NULL REFERENCES "project"(id),
"company_id" integer NOT NULL REFERENCES "company"(id),
PRIMARY KEY (project_id, company_id)
)
您正在查找行安全策略:安全策略指的是Postgres用户还是应用程序用户?从我读到的资料中,我了解到它指的是Postgres用户。我通常会在应用层处理这个问题。您的问题要求在数据库层强制执行,而没有提到应用程序层。如果希望在数据库中强制执行,则必须定义角色并应用行级安全策略才能实现。PostgreSQL中的角色可以是用户或用户组,因此可以将最终用户分配给每个公司的角色,然后根据这些角色制定策略。我已经编辑了这个问题,希望现在更清楚。我是一名初级的全堆栈开发人员,所以我没有设计经验。这个问题可能会因为基于观点和过于开放而被关闭。我建议在web上搜索基于角色的访问控制、jwt和openapi。查找使用您熟悉的堆栈组件的文章。通常,安全性在API层中处理,该层直接访问数据库,并使用REST或JSON-RPC处理来自UI的调用。如果公司和用户总是被允许使用他们自己的东西,那么您的模式是好的。如果您想要更复杂的分配,则需要将角色和权限建模为一个或多个表。您正在查找行安全策略:安全策略指的是Postgres用户还是应用程序用户?从我读到的资料中,我了解到它指的是Postgres用户。我通常会在应用层处理这个问题。您的问题要求在数据库层强制执行,而没有提到应用程序层。如果希望在数据库中强制执行,则必须定义角色并应用行级安全策略才能实现。PostgreSQL中的角色可以是用户或用户组,因此可以将最终用户分配给每个公司的角色,然后根据这些角色制定策略。我已经编辑了这个问题,希望现在更清楚。我是一名初级的全堆栈开发人员,所以我没有设计经验。这个问题可能会因为基于观点和过于开放而被关闭。我建议在web上搜索基于角色的访问控制、jwt和openapi。查找使用您熟悉的堆栈组件的文章。通常,安全性在API层中处理,该层直接访问数据库,并使用REST或JSON-RPC处理来自UI的调用。如果公司和用户总是被允许使用他们自己的东西,那么您的模式是好的。如果需要更复杂的分配,则需要将角色和权限建模为一个或多个表。