postgresql - SQL 数据库设计 - 管理实体的读写用户权限
问题描述
我想强制用户读取和写入文件夹和文件实体的权限。
读是指SELECT
,写是指INSERT
或UPDATE
。
我不确定如何对此建模,并想了解实现以下要求的适当方法:
公司应该有(或没有)读取文件夹及其相关文件的权限。用户应该有(或没有)权限来读取他的公司有权限的文件夹,并且有(或没有)写文件的权限。
意思是读是公司规模的权限,写是用户规模的权限。
编辑
我正在努力解决的问题是文件夹和文件的层次结构。
根据当前要求,我可以在应用程序级别管理权限,这样安全性就不必在数据库级别,但如果是这样,据我了解,我需要向表中添加更多信息 - 列或readers
和的连接表writers
。
- 什么是适当的方法 - 数据库或应用程序级别的安全性?
- 如果在应用程序级别,应该在设计中进行哪些调整来处理层次结构?
这些是我目前拥有的实体:
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)
)
解决方案
推荐阅读
- javascript - 从 forEachloop Javascript 中的异步函数返回值
- node.js - React Native:无法解析本地模块。存在于节点模块中
- ruby-on-rails - 为什么我的 rails 应用程序没有捕获我的条带错误?我是否正确使用救援?
- raspberry-pi - Remote.it 和 openVPN 一起使用
- reactjs - EXPO - 连接 ECONNREFUSED - 连接到 Metro 捆绑器失败
- javascript - element.getElementsByClassName 不是函数
- android - 在firebase中,对 RemoveEventListener 的调用是否保证不会触发侦听器?
- python - Python Sqlite3 在使用 LIKE 提取所有匹配项时引发错误
- reactjs - 如何从 React 应用程序共享 facebook 和 twitter 的内容
- ruby-on-rails - 无法加载此类文件 -- exception_notification (LoadError)