在express.js中具有权限的架构问题

时间:2017-08-04 18:49:26

标签: express architecture permissions authorization relationship

我正在Express.js上构建一些应用程序,我遇到了一个具有权限的架构问题。

示例资源:  Organisationuserunitresource

每个user可以属于多个organisation,每个organisation可以有多个units,每个unit可以有多个resources

假设每个user都可以添加任意数量的unitresource。问题就出现了,因为应用必须检查添加的resource是否实际添加到unit,属于organisationuser执行此查询...

结构是典型的,在实际应用中它会更加复杂,所以像“向上移动”这样的方法可能是不够的。

你们有没有想过如何以最有效的方式解决这个问题?

1 个答案:

答案 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也可以帮助检查。