Database 如何构造我的数据库,以便只有登录的用户才能添加、删除或编辑他们的帖子?

Database 如何构造我的数据库,以便只有登录的用户才能添加、删除或编辑他们的帖子?,database,postgresql,express,authentication,Database,Postgresql,Express,Authentication,我正在使用Express.js制作一个Web应用程序,并且正在学习使用passportjs进行身份验证。我基本上有一个crud web应用程序,可以让任何人编辑、删除或添加web应用程序中的任何内容。以下是我的Postgres数据库的外观 \connect usertesterdb; CREATE TABLE IF NOT EXISTS users ( id BIGSERIAL PRIMARY KEY, username VARCHAR(255), email VAR

我正在使用Express.js制作一个Web应用程序,并且正在学习使用passportjs进行身份验证。我基本上有一个crud web应用程序,可以让任何人编辑、删除或添加web应用程序中的任何内容。以下是我的Postgres数据库的外观

  \connect usertesterdb;

  CREATE TABLE IF NOT EXISTS users (
   id BIGSERIAL PRIMARY KEY,
   username VARCHAR(255),
   email VARCHAR(255),
   password TEXT UNIQUE NOT NULL
  );

为了实现我的目标,最好的方法是什么?目前,这两个表没有相互通信。我希望有一些策略或良好的实践能够使代码干净、易于维护

编辑:我想我可以在我的“mymenutable”中添加另一列,称为“userid”,它引用“users”表中用户的id号,然后每次用户创建、编辑或删除他们的帖子或菜单时,它都会检查登录用户的id是否等于菜单的“userid”。我不知道这是否是正确的方法,或者是否可以以某种方式进行操作。

是的,将外键添加到
mymenutable
将是将用户与每个条目关联起来的规范且最好的方法:

ALTER TABLE mymenutable
   ADD COLUMN userid bigint REFERENCES users(id);
您应该为现有行填充该列,然后将其设置为
非NULL


这是离题的,但我会取消
密码
上的
唯一
约束。我认为这没有什么用处,但除此之外,它还有一个明显的安全风险:用户可以通过设置自己的密码来发现其他用户的密码,他们猜测可能是其他人的密码——一个错误意味着他们找到了一个。

。我从来没有做过任何express.js,但在谷歌的2分钟给了我这样一个信息:还有更多,你到底想做什么?让人们创建自己的菜单,只有他们可以编辑?或者多人可以编辑一个菜单?@baar我希望人们能够创建自己的菜单,只编辑或删除自己的帖子。非常感谢。我会跟着这个想法走。并将删除唯一约束。idk我在想什么。哦,另一方面的评论:在尽可能多的列上使用
notnull
。它将使您的数据更好,查询更简单。此外,删除
NOT NULL
比添加一个要容易得多。我正在考虑通过在所有字段的前端表单上执行
required
来解决这个问题。我是否也应该在后端使用
notnull
。这是防御性编程。我的观察是,如果允许空值,那么最终将得到一些空值。测试数据、人工干预。。。
ALTER TABLE mymenutable
   ADD COLUMN userid bigint REFERENCES users(id);