reactjs - 设计模式:以何种方式在 DB 中构建表:将网站上的文章的访问权限限制为仅订阅用户?
问题描述
这是我关于stackoverflow的第一个问题。所以如果不符合标准请见谅:
使用的数据库:PostgreSQL v11.2
我正在创建一个react.js应用程序来向登录用户显示文章。这些用户可以是:
(i)订阅了其中一项订阅计划的用户,或者
(ii)只是登录并浏览但尚未订阅的用户。
(这部分是管理的 - 这里没有问题)
一篇文章可以属于不同的“类别”。
(这部分是管理的 - 这里没有问题)
现在,对于订阅用户,将显示某些“类别”的文章,普通用户是看不到的。
我想创建一个数据库结构,该结构将根据用户是否订阅来处理这种可见性。
USER
表列(重要):
id、name、 is_subscribed(布尔值)CATEGORY
表列(重要):
id,cat_nameARTICLE
表列(重要):
id,titleARTICLE_CATEGORY
表列:
id、article_id、category_idSUBSCRIPTION
表列:
id、plan_name、价格、描述
如何继续它?
我还没有构建结构来实现它。
什么应该是更好的方法?
(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>
});
解决方案
推荐阅读
- python - Python:使用给定数组的值和索引创建数组
- vue.js - 从 npm 包 VueJs3 导入组件
- r - 连接数据框中的值
- javascript - 从下拉值更改的代码中获取价值
- python - 覆盖帮助字符串
- c# - 使用 c# 绕过 Winforms 的鼠标事件
- flutter - 什么时候应该执行 dispose() 方法?
- xamarin - WifiNetworkSuggestion 未定义 (Xamarin.android)
- mac-catalyst - 当用户在 Mac Catalyst 中退出应用程序时如何关闭 UIDocument 并保存数据
- javascript - 使用 NodeJS 的 Axios 路由 POST 出现问题