Доступ только к конкретным строкам.

Мне нужно сделать так, чтобы пользователь мог получить доступ только к строкам, созданным им самим.

Другими словами:
1) Регистрируется пользователь.
2) Он получает доступ на добавление строк в таблицу.
3) Просматривать и редактировать он может только строки, созданные им самим.

Для этого я сделал дополнительный столбец: username

Доступ будет осуществляться через view

SELECT *
  FROM mytable
  WHERE mytable.username = pg_catalog.current_user()
;

Вроде ничего, но как оставить доступ только к этому view'у, а к старой таблице закрыть?

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

UPD

Уже разобрался.

Посмотрите где ошибка. Кажется синтаксическая, но не вижу.

psql:base.sql:238: ERROR:  syntax error at OR near "INSERT"
LINE 16:       INSERT INTO medschema.users VALUES (

-- Функция создания пользователей
-- Необходима для задания корректных прав.
CREATE FUNCTION medschema.create_user(
  a_uname text,            -- d_user       -- Имя пользователя
  a_passwd text,           --              -- Пароль
  a_sname text,            -- d_surname    -- Фамилия
  a_name text,             -- d_name       -- Имя
  a_pat text,              -- d_patronymic -- Отчество
  a_gender medt_gender,    -- d_gender     -- Пол
  a_spec text,             -- d_speciality -- Должность
  a_bdate date,            -- d_born_date  -- Дата рождения
  a_workp text             -- d_work_place -- Место работы
) RETURNS BOOLEAN          -- !TODO! Результат пара: (успешно?, сообщение)
                           -- !TODO! Если успешно, то сообщение будет NULL
  AS $$
    BEGIN
      -- Заносим информацию о пользователе в таблицу
      INSERT INTO medschema.users
        VALUES (
          a_sname,
          a_name,
          a_pat,
          a_gender,
          a_spec,
          a_bdate,
          a_workp,
          a_uname
        )
      ;
 
      -- Создаём пользователя в системе
      CREATE USER a_uname ;
 
      -- Удаляем все дарованые привилегии над некотрыми таблицами
      REVOKE ALL PRIVILEGES
        ON medschema.analysis,
           medschema.patients,
           medschema.probes_incoming,
           medschema.users
        FROM a_uname
      ;
 
      -- Добавляем доступ на чтение к некотрым таблицам
      GRANT SELECT
        ON medschema.doctors,
           medschema.qualitative_values,
           medschema.type_analysis,
           medschema.type_indicator,
           medschema.type_material,
           medschema.type_probe
        TO a_uname
      ;
 
      -- Добавляем доступ в виды
      GRANT SELECT, UPDATE, INSERT
        ON medschema.view_analysis,
           medschema.view_patients,
           medschema.view_probes_incoming,
           medschema.view_users
        TO a_uname
      ;
 
      RETURN true ;
    END ;
  $$
  LANGUAGE SQL
;

Тут кое-что не правильно, но на это пока плевать. Что ему не нравится в моём инзерте?

UPD, endlich

Со всем разобрался.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023