【发布时间】:2021-05-30 23:37:12
【问题描述】:
我已经创建了一个基本的 node/express 应用程序。
用户可以在 /register 路由上注册,数据发布到 /users/register。用户然后被重定向到登录页面,成功登录后可以访问受保护的路由。
如果您想的话,可以将 MongoDB 作为数据库。
但是,我想实现一个“委托访问”功能。考虑这个例子:
用户注册到网站 ->
const user = {
name: req.body.name,
email: req.body.email,
password: req.body.password,
access: false
}
在我的门户中,我从我的用户集合中获取所有数据。从这里我已经为每个用户设置了一个复选框,以确定是否可以授予用户访问权限。
我很难想出一个体面的解决方案来为多个用户更新它。因为在数据呈现到前端后,我不“知道”用户是谁。
我想要的解决方案是“选中”复选框以分配用户 .access = true ,然后单击更新按钮,然后用户可以登录。
我正在使用通行证对用户进行身份验证,并采用本地策略。
此外,如果任何人有任何使用 smtp 服务的经验,该服务可以与此集成,以便在创建帐户时向用户发送电子邮件,然后向用户发送电子邮件以通知他们已获得访问权限。
非常感谢任何输入。
从 db 呈现用户的前端脚本。
const container = document.querySelector('.dataSection')
fetch('/users/all')
.then(response => response.json())
.then(data => logUsers(data))
const users = []
function renderUsers(data) {
data.forEach((data, index) => {
users.push(data)
const userRow = document.createElement('div')
userRow.className = 'columns user' + data._id
userRow.innerHTML =
`
<div class="column">${data.name}</div>
<div class="column is-4">${data.email}</div>
<div class="column">${data.company}</div>
<div class="column">${data.position}</div>
`
if(data.access) {
userRow.innerHTML +=
`<div class="column is-1 field">
<label class="checkbox" style="text-align: center;">
<input class="is-checkradio is-success" type="checkbox" checked>
</label>
</div>`
} else {
userRow.innerHTML +=
`
<div class="column is-1 field">
<label class="checkbox" style="text-align: center;">
<input class="is-checkradio is-success" type="checkbox">
</label>
</div>
`
}
container.appendChild(userRow)
})
}
【问题讨论】:
-
您是否希望仅在您提供或将“访问”属性设置为 true 时才向用户提供访问权限?您是否有任何条件让您认为允许用户访问?另外,你从哪里得到这个复选框,你还有其他页面吗?
-
是的,只有当访问为真时。这背后的想法是,将向用户提供的内容被认为是“敏感的”。所以只有符合条件的用户才能登录。我最初的想法是允许用户注册,当用户注册时,管理员会收到一封电子邮件通知。然后管理员转到 /users,这会呈现一个页面,显示数据库中的所有用户,呈现姓名、电子邮件、公司以及指定 user.access 是否为真的复选框。然后管理员可以勾选复选框并单击更新。这会触发向用户发送一封新电子邮件。
-
我添加了用于呈现用户的前端脚本。
-
“所以只有符合条件的用户才能登录”,用户有资格访问数据的条件是什么?是管理员随机决定可以访问数据的用户吗?
-
是的,它基于用户对象中的信息。姓名、公司和职位/角色。
标签: node.js mongodb express web-applications