Задача такая:
Нужно сделать так, что бы редактировать конкретную запись в таблице мог только ее создатель.
Проблема:
Отловить возможность записи нужно без фактической записи. Причем отловить на уровне сервера б/д.
В идеале:
Отловить select for update.
Что есть:
В таблице есть поле в котором содержится имя владельца строки.
Вопрос: Как можно такое исполнить?
Любые варианты?
PS: Написать триггер на сравнение с current_user это понятно. Сделать функцию проверки - это понятно.
В идеале нужно что бы не проходил select for update для этой записи.
Как вариант: у пользователя
Как вариант: у пользователя отобраны все права на таблицу, а вся работа с ней совершается с помощью хранимых процедур, которые проверяют дополнительные условия, которые вам необходимы и которые работают от того пользователя, для которого есть все права на таблицу.
Реальное имя пользователя.
Есть некоторые проблемы.
1. Как тогда узнать реальное имя пользователя (в процедуре) т.е. который ее вызвал.?
2. Переходим к прописыванию прав на процедуру.
В таком случае - проще написать функцию проверки с результатом bool.
И, на всяк случай, сделать триггер блокирующий update.
Мне бы хотелось проверять возможность записи используя стандартные средства типа has_<чего-то>_privilege.
на plsql нет возможности сделать функцию для каждой таблицы для однообразного анализа прав. (полиморфизма нет)
А ловить ошибку после того, как пользователь заполнит форму.... не красяво
Не очень понял о правах на строки, из документации, где присутствует условие. Тогда по идее стандартная has_<чего-то>_privilege с указанием чего хочется редактировать должна работать.
Вот бы какой-то пример увидеть, не могу сообразить какой вопрос задать гуглю.
1. Возможно это
1. Возможно это поможет?
http://postgresql.ru.net/manual/functions-info.html
current_user или session_user
2. Варианты есть, пробуйте. Кто кроме вас скажет, что вам больше подойдёт?
> Не очень понял о правах на строки, из документации, где присутствует условие
Не существует прав, выдаваемых на строки таблицы.