访问控制是 Web 应用程序的一个重要组成部分之一。基于角色的访问控制系统可以很好地保护应用程序的安全性。本文将使用 Express.js 和 MongoDB 创建一个基于角色的访问控制系统,为开发人员提供详细的学习和指导意义。
步骤一:安装和配置 Express.js、MongoDB 和 Mongoose
在安装和配置 Express.js、MongoDB 和 Mongoose 之前,确保您已经安装了 Node.js 和 npm 包管理器。在终端中运行以下命令来安装所需的依赖项:
--- ------- ------- ------- -------- ------------
步骤二:创建 MongoDB 数据库
使用 MongoDB 命令行工具或 MongoDB 的图形用户界面(如 Robo 3T)创建一个新的数据库,并为每个应用程序角色分别创建一个集合。例如,如果您的应用程序有两个角色:管理员和普通用户,则可以创建名为 administrators
和 users
的两个集合。
步骤三:创建 Express.js 应用程序
在项目根目录下创建一个名为 app.js
或 server.js
的文件,并编写以下代码:
----- ------- - ------------------- ----- -------- - -------------------- ----- --- - ------------------------ ----- --- - ---------- ----- ---- - ----- ---------------------------------------------------------- -------- -- ---------------------- -- ---------- ---------- -- -------------------- --- ------- -- ----------- ------------------------ -- ---- ------ ---- ---------------- -- -- ------------------- --- --------- -- ---- -----------
这将创建一个 Express.js 应用程序,并设置端口为 3000。还将使用 Mongoose 连接到 MongoDB 数据库。此外,express.json()
中间件将允许我们解析来自客户端的 JSON 请求。
步骤四:设置身份验证和授权中间件
我们将使用 JWT(JSON Web Token)来实现用户身份验证和授权。需要安装和配置 jsonwebtoken
依赖。为了能够使用 JWT,我们需要创建两个中间件:身份验证中间件和授权中间件。
身份验证中间件将使用 JWT 验证用户登录是否有效,并将解码后的用户信息存储在请求对象中的 user
属性中。如果未提供有效的 JWT,则中间件将返回 401 HTTP 状态代码。
-------- --------------------- ---- ----- - ----- ---------- - -------------------------- -- ------------- - ------ ---------------------- -------- -------------- ------ --- ------ --- - ----- ----- - ------------------ ------ --- - ----- ------------ - ----------------- ------------------- -------- - ------------------ ------- - ----- ----- - ---------------------- -------- -------- ------ --- - -
授权中间件将验证用户是否有足够的权限执行请求的操作。如果用户没有足够的权限,则中间件将返回 403 HTTP 状态代码。
-------- -------------------- - ------ ----- ---- ----- -- - -- -------------------------------- - ------ ---------------------- -------- -------------- --- - ------- -- -
要了解如何使用这些身份验证和授权中间件,请继续读下去。
步骤五:创建路由和控制器
现在,我们需要创建路由和控制器来处理来自客户端的 HTTP 请求。对于以下示例,我们将创建两个路由:一个用于获取所有用户(只有管理员可以访问),另一个用于获取单个用户(管理员和具有该用户 ID 的用户可以访问)。
----- ---- - ------------------------- ----------------- ----------------- ------------------------- ----- ----- ---- -- - ----- ----- - ----- ------------ ---------------- --- --------------------- ----------------- ----------------------- --------- ----- ----- ---- -- - ----- ---- - ----- ----------------------------- --------------- ---
我们使用 authenticateUser
中间件确保用户已经登录并使用 authorizeUser
中间件验证用户是否具有所需的角色。
现在,我们需要为我们的 API 创建一个控制器,该控制器将处理每个路由。
---------------- - ----- ----- ---- -- - ----- ----- - ----- ------------ ---------------- -- ------------------- - ----- ----- ---- -- - ----- ---- - ----- ----------------------------- --------------- --
步骤六:创建用户模型
最后,我们需要创建一个用户模型,并将其存储在一个名为 user.js
的文件中。该模型将存储有关用户的信息,包括角色。
----- -------- - -------------------- ----- ---------- - --- ----------------- ----- - ----- ------- --------- ---- -- ------ - ----- ------- --------- ----- ------- ---- -- --------- - ----- ------- --------- ---- -- ----- - ----- ------- --------- ----- ----- --------- ------- -- --- -------------- - ---------------------- ------------
结论
到目前为止,我们已使用 Express.js 和 MongoDB 创建了一个基于角色的访问控制系统。在本文中,我们学习了如何使用 JWT 和中间件实现用户身份验证和授权。我们还讨论了如何创建路由和控制器来处理来自客户端的 HTTP 请求。最后,我们创建了一个用户模型来存储用户信息。
此外,我们指导了读者如何使用身份验证和授权中间件来限制用户的访问权限。这些中间件可以用于任何需要保护的敏感资源,使您的应用程序更加安全。
希望通过本文您能够了解如何使用 Express.js 和 MongoDB 创建基于角色的访问控制系统。如果您对本文的某些方面有任何疑问或意见,请在下方留言。谢谢!
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672971ad2e7021665e248063