Olá @davipsf Bem vindo ao mundo dos SGDBG....
QGIS e PostgreSQL/POSTGIS é um caso de amor eterno....
Vc precisa fazer GRANT e REVOKE no banco para as regras desse usuário
Uma boa prática nesse caso seria, primeiro criar um grupo (group_role) de usuário (role) com tais regras e colocar o usuário dentro desse grupo.
vc pode fazer, primeiro um REVOKE ALL no usuário...
```
REVOKE ALL PRIVILEGES ON [<nome_do_schema>.]<nome_da_tabela> FROM <usuario_ou_grupo>;
```
Após isso pode começar com as regras que deseja para o grupo ou usuário
```
GRANT SELECT, INSERT, UPDATE TO USER <usuario_ou_grupo>;
```
Na sua pergunta
vc valou sobre criar shape, essas permissões são apenas no banco de dados, não inlfuenciam se o usuário pode ou não criar um arquivo shape localmente em sua máquina, mas se ele quiser fazer o upload dessa camada para o banco, a regra que não permite importar camadas para o banco vai rejeitar a ação, bem como a regra de não poder remover camadas vai rejeitar a ação..
Mas terá as regras que permitem ele inserir FEIÇÔES nas tabelas e novas GEOMETRIAS, pois está GARANTIDO (GRANT) que ele tenha a opção de SELECT (para ler os dados da tabela) INSERT (inserção de novo dados) e UPDATE (alteração dos dados na tabela).
Até então essas regras estão operando no nível de tabela..... para fazer isso no nível de dado (feição), vai precisar um pouco mais de estudo do PostgreSQL.
pois precisa criar uma TRIGGER no banco para a tabela que rode ANTES DO DELETE, ela vai verificar se o usuário que criou a feição é o mesmo que está removendo, e assim aceitar ou não a ação...
vc pode ter um campo na tabela que recebe o nome do usuário que está criando o dado.
Só uma coisinha...
Não confunda shapes (formato de dado vetorial criado pela ESRI) com FEIÇÃO, GEOMETRIA ou CAMADA (que pode ser um shape, ou uma tabela de um banco ou um arquivo CSV).
Isso pode evitar algumas confusões até mesmo na hora de tirar dúvidas.