mirror of
https://github.com/postgres/postgres.git
synced 2025-12-21 05:21:08 +03:00
Refactor ownercheck functions
Instead of dozens of mostly-duplicate pg_foo_ownercheck() functions, write one common function object_ownercheck() that can handle almost all of them. We already have all the information we need, such as which system catalog corresponds to which catalog table and which column is the owner column. Reviewed-by: Corey Huinker <corey.huinker@gmail.com> Reviewed-by: Antonin Houska <ah@cybertec.at> Discussion: https://www.postgresql.org/message-id/flat/95c30f96-4060-2f48-98b5-a4392d3b6066@enterprisedb.com
This commit is contained in:
@@ -565,14 +565,14 @@ vacuum_is_relation_owner(Oid relid, Form_pg_class reltuple, bits32 options)
|
||||
*
|
||||
* We allow the user to vacuum or analyze a table if he is superuser, the
|
||||
* table owner, or the database owner (but in the latter case, only if
|
||||
* it's not a shared relation). pg_class_ownercheck includes the
|
||||
* it's not a shared relation). object_ownercheck includes the
|
||||
* superuser case.
|
||||
*
|
||||
* Note we choose to treat permissions failure as a WARNING and keep
|
||||
* trying to vacuum or analyze the rest of the DB --- is this appropriate?
|
||||
*/
|
||||
if (pg_class_ownercheck(relid, GetUserId()) ||
|
||||
(pg_database_ownercheck(MyDatabaseId, GetUserId()) && !reltuple->relisshared))
|
||||
if (object_ownercheck(RelationRelationId, relid, GetUserId()) ||
|
||||
(object_ownercheck(DatabaseRelationId, MyDatabaseId, GetUserId()) && !reltuple->relisshared))
|
||||
return true;
|
||||
|
||||
relname = NameStr(reltuple->relname);
|
||||
|
||||
Reference in New Issue
Block a user