我正试图让我的第一个网络应用程序开始,所以我很清楚这是一个初学者的问题。
我使用Node,express和Mongo作为后端,Stormpath为视图提供用户登录/身份验证和jade。登录功能正常,只是我想为不是经理的用户隐藏“上传新计划”按钮:
// 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将上传按钮隐藏给未登录为第一组(经理)的人?中间件工作得很好,如果他们试图点击该按钮,那么非经理人就会得到一个错误页面,但我宁愿隐藏它。
答案 0 :(得分:0)
你需要做的是:
以下是它如何适用于您的用例:
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
希望这有用!我是这个图书馆的作者,偶然发现了这个=)
我目前正在寻找新方法,以便将来更轻松,所以希望在下一个大版本中它会更简单=)