1. ホーム
  2. security

[解決済み] Node.js + Express.js ユーザーパーミッションセキュリティモデル

2023-08-05 05:06:45

質問

2種類のユーザーが存在するアプリケーションがあります。ユーザーがどのようにログインするかによって、アプリケーションの異なる部分にアクセスできるようにしたいと思います。

ユーザーがアクセス権のないものを見ることができないようにするには、どのようにセキュリティモデルを実装すればよいでしょうか。

セキュリティを各ルートの実装の一部にするのでしょうか?問題は、リクエスト間でいくつかの重複したロジックを持つことになります。これをヘルパー関数に移動させることができますが、まだそれを呼び出すことを忘れないようにする必要があります。

セキュリティをグローバルな app.all() ルートハンドラの一部にするのでしょうか?問題は、各ルートを検査し、多数の規則に基づいて異なるロジックを実行しなければならないことです。少なくとも、すべてのコードは1つの場所にありますが、しかし、その後...すべてのコードは1つの場所にあるのです。

どのように解決するのか?

ルートごとに設定することで、通常、私の場合はうまくいきます。これは私が通常行うことです。

function requireRole (role) {
    return function (req, res, next) {
        if (req.session.user && req.session.user.role === role) {
            next();
        } else {
            res.send(403);
        }
    }
}

app.get("/foo", foo.index);
app.get("/foo/:id", requireRole("user"), foo.show);
app.post("/foo", requireRole("admin"), foo.create);

// All bars are protected
app.all("/foo/bar", requireRole("admin"));

// All paths starting with "/foo/bar/" are protected
app.all("/foo/bar/*", requireRole("user"));