我正在努力让我的第一个网络应用程序启动,所以我很清楚这是一个初学者问题。
我使用 Node、express 和 Mongo 作为后端,Stormpath 提供用户登录/身份验证和 jade View 。登录功能工作正常,只是我想为非管理员用户隐藏“上传新计划”按钮:
// app.js
...
app.use(stormPathmiddleware);
app.get('/', function(req, res) {
res.render('home', {
title: 'Welcome'
});
);
app.get('/upload', stormpath.groupsRequired(['Enforced']), function(req, res) {
res.render('upload', {
title: 'Upload Excel File'
});
});
....
我希望有两类人使用它:经理和其他人。所以home.jade:
html
head
title=title
link(href='//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css', rel='stylesheet')
body
div.container
div.jumbotron
h1 Hello!
if user
p Welcome, #{user.fullName}
p
a.btn.btn-primary(href="/upload") Upload New Schedule
br
br
a.btn.btn-primary(href="/logout") Logout
else
p Login now to see this weeks schedule.
p
a.btn.btn-primary(href="/login") Login now
如何让jade对未作为第一组(管理员)登录的人隐藏上传按钮?中间件工作得很好,也就是说,如果不是经理的人尝试单击该按钮,他们会收到一个错误页面,但我宁愿隐藏它。
最佳答案
您需要在这里做的是:
- 在路由代码中预加载您想要执行的权限检查。
- 将其传递到您的模板中。
- 在模板中使用此变量来显示或不显示内容。
以下是它如何适用于您的用例:
app.get('/upload', function(req, res, next) {
var isManager = false;
// Search through this user's groups, for any group named 'managers'.
req.user.getGroups({ name: 'managers' }, function(err, groups) {
if (err) return next(err);
// If this user is a member of a 'managers' group, it means
// this user is a manager.
if (groups.items && groups.items[0].name === 'managers') {
isManager = true;
}
res.render('upload', {
title: 'Upload Excel File',
isManager: isManager // Pass in the membership information to Jade.
});
});
});
现在我们已经定义了一个路由并传入了管理器信息,我们可以编写一个 Jade 文件来执行如下操作:
if isManager
// display html code here for managers
else
// display NON manager html code here
希望这对您有帮助!我是这个库的作者,只是偶然发现了这个 =)
我目前正在寻找新的方法来使将来变得更容易,所以希望在下一个大版本中它会变得更加简单 =)
关于node.js - (Jade & Stormpath) 仅在特定用户访问页面时显示某些 HTML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31494417/