RBAC for Postgres SQL Data Model for Owner and Unauthenticated

问题描述 投票:0回答:0

我有一张这样的桌子:

CREATE TYPE action_types AS ENUM ('VIEW', 'INSERT', 'UPDATE', 'DELETE');

CREATE TABLE resources(
    id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
    name text NOT NULL
);

CREATE TABLE roles(
    id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
    name text NOT NULL
);

CREATE TABLE users(
    id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
    role_id uuid REFERENCES roles(id) NOT NULL ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE permissions(
    id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
    action action_types NOT NULL,
    resource_id uuid REFERENCES resources(id) NOT NULL ON DELETE CASCADE ON UPDATE CASCADE,
    UNIQUE(action, resource_id)
);

CREATE TABLE access(
    role_id uuid REFERENCES roles(id) ON DELETE CASCADE ON UPDATE CASCADE,
    permission_id uuid REFERENCES permissions(id) NOT NULL ON DELETE CASCADE ON UPDATE CASCADE,
    PRIMARY KEY(role_id, permission_id)
);

(类似于这个数据模型

桌子:

  • 资源是我的表格(如帖子、类别、评论等)...
  • 角色(如管理员、编辑等)
  • 用户(任何登录的人)
  • 权限(查看帖子、更新评论、删除类别等)
  • access(管理员有权更新评论等)

问题:

我有两个关键问题:

  1. 如何更改模型以处理资源的所有者(创建者)。我可能希望帖子的所有者能够编辑和创建帖子,但不能删除帖子。超过一个所有者怎么办?
  2. 如何更改模型以处理未经身份验证的用户?我可能希望任何人都能够查看评论,但不能编辑或删除它们。

显然在实践中处理权限将需要RLS或其他方式,这只是一个数据建模问题。

J

sql postgresql data-modeling
© www.soinside.com 2019 - 2024. All rights reserved.