当前位置: 首页 > 知识库问答 >
问题:

节点中的用户角色和基于权限的访问。js

闽阳州
2023-03-14

我已经开发了应用程序在Node.js.我使用序列化MSSQL和我已经创建了API的我正在消耗API的角。

我想知道的是关于安全性的事情:我已经实现了JWT的身份验证。现在我想实现角色权限管理我的要求是:

  1. 一个用户可以有多个角色(管理员、管理员)
  2. 角色可以具有多个权限(创建、更新等)

因此,一个用户可以拥有一个或多个角色,一个角色可以拥有一个或多个权限。权限类似于创建记录、删除记录等。用户可以访问他拥有权限的API。

是否有NPM的任何包或任何其他建议?

到目前为止我发现了这个:用户-组-角色https://www.npmjs.com/package/user-groups-roles

共有2个答案

仲和韵
2023-03-14

首先,您需要创建包括角色在内的用户模型。userModel.js

const mongoose=require('mongoose');
const validator=require('validator');
const userSchema=new mongoose.Schema({
    name:{
        type:String,
        required:[true,'Please tell us your name ']
    },
    email:{
        type:String,
        required:[true,'Please provide your mail'],
        unique:true,
        lowercase:true,
        validate:[validator.isEmail,'Please provide valid email'],
    },
role:{
        type:String,
        enum:['user','guide','admin'],
        default:'user'
    },
})
const User=mongoose.model('User',userSchema);
module.exports=User;

您可以将此代码用于角色验证。(authController.js)

exports.restictTo=(...roles)=>{
    return(req,res,next) =>{
        //role ['admin','guide'].role=user
      if(!roles.includes(req.user.role)){
          return next(consloe.log('You do not have permission to perform this action',403));
      }
      next();
    }
}

最后,您可以在路由authRoute中调用restictTo函数。js

    const express=require('express');

    const authController=require('./../controllers/authController')
    const router=express.Router();
    router.route('/').get(authController.protect,authController.restictTo('admin'),userController.getalluser);
module.exports=router;
益麻雀
2023-03-14

您只需在db中创建新表,例如“用户角色”,传递您想要的角色,然后将用户与您想要的角色连接起来。然后在服务器上,您应该创建中间件,检查用户是否有权访问特定endpoint,若并没有,则抛出401/403。

 类似资料:
  • 情景: 我们有一个多租户应用程序,其中每个租户都有自己的模式。有一个公共模式,其中存在一个包含每个租户记录的表。因此,有一个超级管理员可以创建租户,并将管理员分配给新创建的租户。 为了实现RBAC(基于角色的访问控制),我计划将每个角色表放入租户模式,并实现一些中间件来检查授权。在孤立的模式环境中,这是一个好的体系结构吗?

  • 我目前正在学习MEAN堆栈,开发一个简单的TODO应用程序,并希望为此实现基于角色的访问控制(RBAC)。我怎么设置角色 我想要3个角色(角色可能看起来很有趣,但这纯粹是为了学习): 上帝 超级英雄 人 GOD-类似于超级管理员,可以在应用程序中做任何事情。C, R, U, D权限适用于TODO和其他用户。可以创建一个TODO 超级英雄——类似于管理员,有超能力在他的个人数据上做任何事情——对于T

  • 读后http://en.wikipedia.org/wiki/Role-based_access_control看到人们建立授权/访问控制的方式,我想到了这个问题:“为什么我们在检查用户是否被允许执行X操作时检查用户的角色,而不是检查他们的权限?” 这就是我所理解的,用户有角色,角色有权限,这就是用户可以拥有权限的方式(用户不能明确地拥有分配给它的权限,它通过拥有角色获得权限) 我认为,在处理添加

  • 我是oAuth2安全系统的新手。关于访问REST资源的基于用户角色的授权,我有一个问题。我的互联网冲浪提供了关于oauth2的身份验证部分的输入。 让我提供给你困扰我的情况。

  • 问题内容: 是否可以使用任何基于角色的开源访问控制系统? 问题答案: 布兰登·萨维奇(Brandon Savage)在他的PHP软件包“ ApplicationACL ” 上做了一个演示,该演示可能会或可能不会完成基于角色的访问。PHPGACL可能也能正常工作,但是我不能肯定地告诉您。 但是,我可以告诉您的是Zend Framework 的Zend_ACL组件将执行基于角色的设置(但是您必须子类化

  • 角色定义 [role_definition] 是RBAC角色继承关系的定义。 Casbin 支持 RBAC 系统的多个实例, 例如, 用户可以具有角色及其继承关系, 资源也可以具有角色及其继承关系。 这两个 RBAC 系统不会互相干扰。 此部分是可选的。 如果在模型中不使用 RBAC 角色, 则省略此部分。 [role_definition] g = _, _ g2 = _, _ 上述角色定义表