Я хотел бы принудительно разрешить пользователю читать и записывать объекты папок и файлов.
Под чтением я подразумеваю SELECT
, а под записью я подразумеваю INSERT
или UPDATE
.
Я не уверен, как это смоделировать, и хотел бы узнать, как лучше всего выполнить следующие требования:
Компания должна иметь (или не иметь) разрешение на чтение папок и связанных файлов к нему. Пользователь должен иметь (или не иметь) разрешение на чтение папки, в которой его компания имеет разрешение, и иметь (или нет) разрешение на запись файла.
Значение чтения - это разрешение в масштабе компании, а запись - это разрешение в масштабе компании. пользовательская шкала.
РЕДАКТИРОВАТЬ
Проблема, с которой я борюсь, - это иерархия папок и файлов.
По текущим требованиям я могу управлять разрешениями на уровне приложения, так что безопасность не t должен быть на уровне базы данных, но если это так, насколько я понимаю, мне нужно добавить дополнительную информацию в таблицы - столбцы или таблицу соединений для 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)
)