数据库结构和查询构建
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 使用中间件,而不是静态的)。
- 群组中的图片只能由其成员查看。
- 如果你和他在同一组,可以看到他的照片。
我在这里没有太多想法。我看到问题是为了获取图片,你需要检查请求图片的用户属于哪些组。
所有想到的是在生成 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。
请告知如何完成此任务。
有一个实体——用户。 他可以创建一个组,其中将有其他具有某些权限的用户。
这里我感兴趣的是如何正确计算请求成本以获取用户和来宾的组。
我假设群里会有相应的字段,我会选择,但我不太明白如何在这个群里正确地存储来宾的角色。我有一个想法,但我不确定是否可以。
interface Group {
id: string;
ownerId: string;
guestsId: string[];
// or my idea :)
guests: Array<{
guestId: string;
role: string;
}>
}
也许您需要为此创建另一个 table?我正在使用关系数据库
同理。问题编号 2。 每个用户有一张照片,每个组都有照片。
我需要限制不同用户对图片的访问(获取将通过 api 使用中间件,而不是静态的)。
- 群组中的图片只能由其成员查看。
- 如果你和他在同一组,可以看到他的照片。
我在这里没有太多想法。我看到问题是为了获取图片,你需要检查请求图片的用户属于哪些组。
所有想到的是在生成 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。