首页 > 解决方案 > 设计模式:以何种方式在 DB 中构建表:将网站上的文章的访问权限限制为仅订阅用户?

问题描述

这是我关于stackoverflow的第一个问题。所以如果不符合标准请见谅:

使用的数据库:PostgreSQL v11.2

我正在创建一个react.js应用程序来向登录用户显示文章。这些用户可以是:
(i)
订阅了其中一项订阅计划的用户,或者
(ii)只是登录并浏览但尚未订阅的用户。
(这部分是管理的 - 这里没有问题)

一篇文章可以属于不同的“类别”。
(这部分是管理的 - 这里没有问题)

现在,对于订阅用户,将显示某些“类别”的文章,普通用户是看不到的。

我想创建一个数据库结构,该结构将根据用户是否订阅来处理这种可见性。

如何继续它?
我还没有构建结构来实现它。

什么应该是更好的方法?

(1) 我应该在类别/文章级别进行吗?
例如:“ARTICLE_CATEGORY”和“ARTICLE”表将包含布尔列“subscribers_only”。

或者

(2) 我应该维护一个单独的表格,将我的订阅计划与类别/文章联系起来吗?

我的 USER 模型如下所示:

const User = sequelize.define("user", {
    full_name: { type: DataTypes.STRING },
    email: { type: DataTypes.STRING },
    password: { type: DataTypes.STRING },
    email_verify_token: { type: DataTypes.STRING },
    is_email_verified: { type: DataTypes.BOOLEAN },
    is_subscribed: { type: DataTypes.BOOLEAN },
    ... <many more columns>
  });


我的 SUBSCRIPTION_PLAN 模型如下所示:

const SubscriptionPlan = sequelize.define("subscription_plan", {
    plan_name: { type: DataTypes.INTEGER },
    price: { type: DataTypes.INTEGER }
    ... <many more columns>
  });


我的 SUBSCRIBERS 模型如下所示:

const Subscriber = sequelize.define("subscriber", {
    user_id: { type: DataTypes.INTEGER },
    subscription_id: { type: DataTypes.INTEGER }
    ... <many more columns>
  });


我的 ARICLE 模型如下所示:

const Article = sequelize.define("article", {
    title: { type: DataTypes.STRING },
    url: { type: DataTypes.STRING },
    display_pic: { type: DataTypes.STRING },
    ... <many more columns>
  });


我的 ARICLE_CATEGORY 模型如下所示:

const ArticleCategory = sequelize.define("article_catgeory", {
    article_id: { type: DataTypes.INTEGER },
    category_id: { type: DataTypes.INTEGER }
    ... <many more columns>
  });

标签: reactjsdatabasepostgresqldesign-patternspermissions

解决方案


推荐阅读