我正在Express.js上构建一些应用程序,我遇到了一个具有权限的架构问题。
示例资源:
Organisation
,user
,unit
,resource
每个user
可以属于多个organisation
,每个organisation
可以有多个units
,每个unit
可以有多个resources
。
假设每个user
都可以添加任意数量的unit
和resource
。问题就出现了,因为应用必须检查添加的resource
是否实际添加到unit
,属于organisation
,user
执行此查询...
结构是典型的,在实际应用中它会更加复杂,所以像“向上移动”这样的方法可能是不够的。
你们有没有想过如何以最有效的方式解决这个问题?
答案 0 :(得分:0)
这些关系需要在数据库中构建,听起来像你需要像mysql这样的关系数据库(an answer for node.js and mysql)。
以下是创建第一个表结构的示例代码,如果您还需要用户和单位或资源之间的链接,您可能需要做出决定:
CREATE TABLE Users (
userid SERIAL PRIMARY KEY,
username VARCHAR(100) UNIQUE KEY,
email VARCHAR(256),
password VARCHAR(256),
created_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE Organisation (
orgid SERIAL PRIMARY KEY,
organisation VARCHAR(140) UNIQUE KEY
);
CREATE TABLE User2Organisation (
userid BIGINT UNSIGNED NOT NULL,
orgid BIGINT UNSIGNED NOT NULL,
FOREIGN KEY (userid) REFERENCES Users(userid),
FOREIGN KEY (orgid) REFERENCES Organisation(orgid),
PRIMARY KEY (userid,orgid)
);
CREATE TABLE Units (
unitid SERIAL PRIMARY KEY,
unit VARCHAR(140) UNIQUE KEY,
orgid BIGINT UNSIGNED NOT NULL,
FOREIGN KEY (orgid) REFERENCES Organisation(orgid)
);
CREATE TABLE Resources (
resourceid SERIAL PRIMARY KEY,
resource VARCHAR(140) UNIQUE KEY,
unitid BIGINT UNSIGNED NOT NULL,
FOREIGN KEY (unitit) REFERENCES Units(unitid)
);
这只是数据库设计的起点。如果用户拥有正确的访问权限,View也可以帮助检查。