首页 > 解决方案 > SQL 数据库设计 - 管理实体的读写用户权限

问题描述

我想强制用户读取和写入文件夹和文件实体的权限。

读是指SELECT,写是指INSERTUPDATE

我不确定如何对此建模,并想了解实现以下要求的适当方法:

公司应该有(或没有)读取文件夹及其相关文件的权限。用户应该有(或没有)权限来读取他的公司有权限的文件夹,并且有(或没有)写文件的权限。

意思是读是公司规模的权限,写是用户规模的权限。


编辑

我正在努力解决的问题是文件夹和文件的层次结构。

根据当前要求,我可以在应用程序级别管理权限,这样安全性就不必在数据库级别,但如果是这样,据我了解,我需要向表中添加更多信息 - 列或readers和的连接表writers

  1. 什么是适当的方法 - 数据库或应用程序级别的安全性?
  2. 如果在应用程序级别,应该在设计中进行哪些调整来处理层次结构?

这些是我目前拥有的实体:

 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)
             )

标签: postgresqldatabase-design

解决方案


推荐阅读