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的调用。如果公司和用户总是被允许使用他们自己的东西,那么您的模式是好的。如果需要更复杂的分配,则需要将角色和权限建模为一个或多个表。