简介
roles-rest-express 是一款为 Express 框架设计的 npm 包,它提供了一种简单而有效的角色权限控制方式。该 npm 包基于 JSON Web Token (JWT) 和 HTTP 方法来为应用提供鉴权服务,并支持使用 MongoDB 数据库存储和管理角色和权限。
本文将详细地介绍 roles-rest-express 的安装和使用方式,并通过示例代码演示其功能和意义。
环境需求
在使用 roles-rest-express 前,请确保你已经满足了以下的环境需求:
- Node.js (版本 >= 8)
- MongoDB
安装
你可以通过 npm 来安装 roles-rest-express,使用下面的命令即可:
npm install roles-rest-express
使用
初始化
在你的 Express 应用中,你需要先配置 roles-rest-express 的初始化参数,如下:
-- -------------------- ---- ------- ----- ------- - ------------------ ----- -------- - ------------------- ----- ---------- - ---------------------- ----- - ------------ - - ----------------------------- ----- --- - --------- ----- ---- - ---- ---------------------------------------------------------- - ---------------- ----- ------------------- ----- --------------- ----- ----------------- ----- -- ----- ----- - --- -------------- ---------- ---------------- ---------- ------- ---------- ------- ---------------- ------------- ---------------- ------------------- -- -------------------- -- - ---------------- -- -- - ---------------- --------- -- -------------------------- -- --
在上面的代码中,我们先定义了 Express 应用和端口号。然后,我们初始化了 MongoDB 的连接和 roles-rest-express 的实例 roles,并且在 init() 函数中对它进行了初始化。在初始化过程中,我们配置了应用的密钥(secretKey)以及与 MongoDB 相关的模型名称和连接信息。
初始化完成后,我们监听端口号并启动应用,这时你可以在浏览器中通过访问 http://localhost:3000 来验证应用是否能够正常运行。
创建用户
在应用中,我们需要先创建一些用户。为了简单起见,我们使用了 MongoDB 来管理用户,并在初始化过程中定义了 userModel。在 model 的定义上,我们建议你在数据模型(schema)中设置 username 和 password 这两个字段,以便更好地使用 roles 权限服务。
在下面的代码中,我们演示了如何通过 users 集合来创建一个名为 admin 的管理员用户。首先,我们在 schema 中添加了用户名和密码字段,然后我们用 createUser() 函数来创建用户,并使用 setRole() 函数将该用户的角色设为管理员。
-- -------------------- ---- ------- ----- ---------- - --- ----------------- --------- - ----- ------- ------- ----- --------- ---- -- --------- - ----- ------- --------- ---- - -- ----- ---- - ---------------------- ----------- ------------------ --------- -------- --------- -------- ------- ---- ----------------- -- - ------------------------ -------- --
在上面的代码中,我们使用了 Promise 来处理 createUser() 和 setRole() 函数的返回值,以便在后续的执行中更加灵活。
创建角色
roles-rest-express 支持创建不同的角色和权限。为了管理和控制角色和权限,我们需要在初始化过程中指定相应的模型名称和连接信息。在下面的代码中,我们定义了 Role 和 Permission 这两个 MongoDB 模型,并将它们的名称和连接信息传入到 roles 实例中。然后,我们就可以通过创建角色来定义 user、admin 和 guest 这三个角色。
-- -------------------- ---- ------- ----- ---------- - --- ----------------- ----- - ----- ------- ------- ----- --------- ---- -- ------------ ------- ------------ ------ ------ -- ----- ------------------------------- ---- ------ -- -- ----- ---- - ---------------------- ----------- ----- ---------------- - --- ----------------- ----- - ----- ------- ------- ----- --------- ---- -- ------------ ------ -- ----- ---------- - ---------------------------- ----------------- ------------------ ----- ------- ------------ ------- ------ ---------------- -- - ------------------ ----- -------- ------------ ---------------- ----------------- -- - ------------------ ----- -------- ------------ ------ ------ -- -- --
在上面的代码中,我们使用了 Promise 来处理 createRole() 函数的返回值,并将三个角色的名称和描述信息传入到函数中。在创建角色的同时,我们还可以创建权限,以便更精细地控制对资源的访问。
创建资源
为了测试角色和权限的功能,我们需要先创建一些资源。在 roles-rest-express 中,我们可以使用 HTTP 方法来定义资源,不同的 HTTP 方法代表了不同的资源操作。
在下面的代码中,我们使用了 RESTful 风格来定义三个资源——/users、/articles 和 /books,并配置了 GET、POST、PUT 和 DELETE 这四个 HTTP 方法。
-- -------------------- ---- ------- ----------------- ----- ---- -- - -------------------------- ---- ---- -- -- - ---------------------- -- - --------------- -- -- -- ------------------ ----- ---- -- - -------------------------- ---- ---- -- -- - ----- ------- - --- ------ --------- ------------------ --------- ----------------- -- ---------------------- -- - -------------- --------- -- -- -- --------------------- ----- ---- -- - -------------------------- ---- ---- -- -- - -------------------------------------- -- - ------------- - ----------------- ------------------- -- - -------------- --------- -- -- -- -- ------------------------ ----- ---- -- - -------------------------- ---- ---- -- -- - --------------------------------------------- -- - -------------- --------- -- -- --
在上面的代码中,我们使用了 Express 提供的 app.get()、app.post()、app.put() 和 app.delete() 等方法来定义不同的资源操作,并在每个操作中使用 requireRole() 函数来判断当前用户是否具有所需的角色(admin)。如果用户具有该角色,那么就会执行回调函数,并返回相应的资源操作结果。
验证用户
最后,我们需要验证用户的角色和权限是否与资源操作相符。在 HTTP 请求中,我们可以使用 JWT 来保存用户的信息和角色权限,以及对它们进行加密和解密。
在下面的代码中,我们使用了 express-jwt 和 jsonwebtoken 两个 npm 包来验证 JWT 和加密数据。
-- -------------------- ---- ------- ----- --- - ----------------------- ----- ---------- - ---------------------- ----- ------------------ - ----- -- - -- -------------------------- -- --------------------------------- ----- --- --------- - ------ --------------------------------- ----- - ------ ---- - ------------------------------- --------- ---- --- -------------------------- -------------------- ------- ---------------- ----------- ---------- --------- ------------------ ----------- ----- ----------------- --------------- --- ------------------------- ----- ---- -- - ----- ------- - --- ------ --------- ------------------ --------- ----------------- -- ------------------------ -- - ----- ----- - ---------- ------- -------- -- ---------------- ---------- ------ ----- -- -- -- ------------------------ ----- ---- -- - -------------- --------- ----------------- ------------ -- - -- ------- - -------------- --- ------- - ---- - --------------------------------------- ----- -------- -- - -- --------- - ----- ----- - ---------- ------- -------- -- ---------------- ---------- ------ ----- -- - ---- - ----------------- ---------- - -- - -- --
在上面的代码中,我们首先通过 getTokenFromHeader() 函数来获取用户的 JWT,并通过 app.use() 方法来验证 JWT 是否正确。在验证通过后,我们就能够使用习惯的 HTTP 方法来进行资源操作了。
总结
roles-rest-express 是一款非常好用的前端权限控制 npm 包,它支持创建用户、角色和权限,可以针对不同的 HTTP 方法对资源进行操作,并支持 JWT 鉴权和加解密。借助 roles-rest-express,你可以更好地管理和控制你的 Express 应用的访问权限,提高应用的安全性和可靠性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600552cf81e8991b448d036a