gpt4 book ai didi

node.js - 连接角色 : Define User Roles on Login and User. 是函数

转载 作者:太空宇宙 更新时间:2023-11-03 21:59:18 25 4
gpt4 key购买 nike

我尝试使用 connect-roles ( https://github.com/ForbesLindesay/connect-roles ),但我在定义用户角色并检查它们方面遇到了困难。

问题 1

如何保存用户角色以便连接角色可以访问它?

问题 2

为什么 console.log 返回一个函数而不是 true 或 false?

我在我的 server.coffee 中设置了通行证和连接角色

...
passport = require('passport')
require('./backend/config/passport')(passport) #pass passport for configuration
ConnectRoles = require('connect-roles')

appUser = new ConnectRoles(
failureHandler: (req, res, action) ->
# optional function to customise code that runs when
# appUser fails authorisation
accept = req.headers.accept or ''
res.status 403
if ~accept.indexOf('html')
res.render 'access-denied', action: action
else
res.send 'Access Denied - You don\'t have permission to: ' + action
return
userProperty: 'appUser'
)

...

app.use(passport.initialize())
app.use(passport.session()) # persistent login sessions
app.use(appUser.middleware())

...

appUser.use 'superAdmin', (req) ->
if req.appUser.role == 'superAdmin'
return true
return

...
require('./backend/routes.js')(app, passport, appUser, db, environment)

当用户登录时,应将用户权限级别附加到 session

  passport.use 'local-login', new LocalStrategy({
usernameField: 'email'
passwordField: 'password'
passReqToCallback: true
}, (req, email, password, done) ->
UserModel.findOne { 'email': email, 'active': true }, (err, user) ->
if err
return done(err)
if !user
console.log 'Emailadresse unbekannt'
return done(null, false, {message: 'Emailadresse unbekannt'})
if !user.validPassword(password)
console.log 'Passwort nicht korrekt'
return done(null, false, {message: 'Passwort nicht korrekt'})

console.log "user with id: #{user._id} and permissionLevel: #{user.permissionLevel} has logged in"
req.appUser = {} if !req.appUser?
switch user.permissionLevel
when 'superAmdin'
req.appUser.role = 'superAmdin'
when 'national'
req.appUser.role = 'national'
when 'nationalField'
req.appUser.role = 'nationalField'
when 'institute'
req.appUser.role = 'institute'
when 'employee'
req.appUser.role = 'employee'
when 'patient'
req.appUser.role = 'patient'
done null, user
return

检查路由中的用户级别

#==================================================== INSTITUTE ====================================================
app.post('/createInstitute', cleanBody, (req, res) ->
console.log "permission"
console.log appUser.is('superAdmin')
if appUser.is('superAdmin')
instituteService.createInstitute(db, req.body.institute, (err, instituteId) ->
if (err)
return res.json({ err: err })
return res.json(instituteId: instituteId)
)
else return res.json({ err: "keine ausreichende Berechtigung" })
)

日志显示用户的值不正确或不正确

permission
{ [Function] here: [Function] }

最佳答案

代码更改用户对象

我发现单独在 connect.roles 中定义用户标识符是行不通的。 Passport 使用通过 req.user 检索的用户对象。 ID 保存在 session 中,并且 Passport 借助每条路线上的 ID 检索完整的用户对象。为了方便起见,我将应用程序中的所有用户重命名为不同的名称,并使用 user 而不是 appUser 进行授权。

2 检查角色

我没有尝试读出我的权限(permissionLevel,它保存在我的用户数据库中),而是直接检查我的用户模型中的permissionLevel。

在路由中,您必须使用 req.user.is 而不是 user.is:

 appUser.use 'superAdmin', (req) ->
if req.user.permissionLevel == 'superAdmin'
return true
return

关于node.js - 连接角色 : Define User Roles on Login and User. 是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31519736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com