数据库结构和查询构建

Database structure and query building

请告知如何完成此任务。

有一个实体——用户。 他可以创建一个组,其中将有其他具有某些权限的用户。

这里我感兴趣的是如何正确计算请求成本以获取用户和来宾的组。

我假设群里会有相应的字段,我会选择,但我不太明白如何在这个群里正确地存储来宾的角色。我有一个想法,但我不确定是否可以。

interface Group {
  id: string;
  ownerId: string;
  guestsId: string[];
  // or my idea :)
  guests: Array<{
    guestId: string;
    role: string;
  }>
}

也许您需要为此创建另一个 table?我正在使用关系数据库

同理。问题编号 2。 每个用户有一张照片,每个组都有照片。

我需要限制不同用户对图片的访问(获取将通过 api 使用中间件,而不是静态的)。

  1. 群组中的图片只能由其成员查看。
  2. 如果你和他在同一组,可以看到他的照片。

我在这里没有太多想法。我看到问题是为了获取图片,你需要检查请求图片的用户属于哪些组。

所有想到的是在生成 jwt 令牌时,获取用户组列表并将它们添加到此令牌中。 但我不确定。

非常感谢您的想法和建议。

从数据库的角度来看,我看到 tables:

用户table

Userid (PK)
UserName
UserPhoto

组table

Groupid (PK)
GroupName

权限table

Rightid (PK)
RightName

图片

Pictureid (PK)
PictureLocation

Linktables

Group_has_rights

Groupid (FK)
Rightid (FK)

Group_has_users

Groupid (FK)
Userid (FK)

Groups_has_Pictures

Groupid (FK)
Pictureid (FK)

使用 Groups_has_SOMETHING table 建立 many-to-many 关系。这样,用户、权限和图片可以关联到多个组。

它为您提供了完全的灵活性来匹配当前和未来的要求和组合。


使用 link tables,这是一个关系数据库,您可以使用 JOIN 语句来提取所需项目的任何列表。无需遍历代码中的列表,数据库会完成这一切。


对于您的来宾用户,我不明白您的要求。定义来宾用户应具有的权限并将其关联到在 Groups_has_Rights.

中具有这些权限的组

您的应用程序代码可以将当场创建的 guest1、guest2...用户与 link 关联到适当的组。


对于您的图片,您会在 Groups_has_User 中获得当前用户的群组列表。然后,您将获得要通过 Groups_has_Pictures 显示的图片列表,用于上面列出的组。在您的 SQL.

中使用 JOIN

对于照片,您在 Groups_has_User 中获取当前用户的群组列表。从该列表中,您将获得同一组中所有其他用户的列表,同样来自 Groups_has_User。然后从用户列表中,您 select UserPhoto。同样,在 SQL.

中使用 JOIN

显然这只展示了table的基本结构和关系。每个table都会包含更多信息,我只是演示了squeleton。