SQL дизайн базы данных - управление разрешениями на чтение и запись для объекта - PullRequest
1 голос
/ 05 августа 2020

Я хотел бы принудительно разрешить пользователю читать и записывать объекты папок и файлов.

Под чтением я подразумеваю SELECT, а под записью я подразумеваю INSERT или UPDATE.

Я не уверен, как это смоделировать, и хотел бы узнать, как лучше всего выполнить следующие требования:

Компания должна иметь (или не иметь) разрешение на чтение папок и связанных файлов к нему. Пользователь должен иметь (или не иметь) разрешение на чтение папки, в которой его компания имеет разрешение, и иметь (или нет) разрешение на запись файла.

Значение чтения - это разрешение в масштабе компании, а запись - это разрешение в масштабе компании. пользовательская шкала.

РЕДАКТИРОВАТЬ

Проблема, с которой я борюсь, - это иерархия папок и файлов.

По текущим требованиям я могу управлять разрешениями на уровне приложения, так что безопасность не t должен быть на уровне базы данных, но если это так, насколько я понимаю, мне нужно добавить дополнительную информацию в таблицы - столбцы или таблицу соединений для 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)
             )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...