我正在为配置了许多组的公司制作Stormpath-Express应用程序。每个组只能看到页面上的某些元素(即,管理员可以删除和批准帖子,用户只能创建和编辑它们)。是否可以使用Jade创建条件,通过获取用户的组成员身份来显示组件?
这里有一个粗略的例子来说明我的意思:
if user.admin === true
a.btn.submit Approve Post
else
p Please wait for management to approve
我注意到我可以使用user.fullName
,user.email
等,但不能使用user.directory
。
我还使用getDirectory方法
在服务器端尝试了这个client.getDirectory(href, function(err, dir) {
console.log(dir);
});
但是,这是来自Node文档,并在应用于我的Express项目时中断。我非常感谢任何帮助,因为我在截止日期前了!
答案 0 :(得分:2)
非常感谢rdegges的答案,我不得不使用版本1.0.5 express-stormpath进行修改,因为groups属性用于存储uri以检索组...
app.get('/page', stormpath.loginRequired, function(req, res) {
req.user.groupsNames = [];
req.user.getGroups(function(err, groups) {
if (err) return next(err);
groups.each(function(group, cb) {
req.user.groupsNames.push(group.name);
cb();
}, function(err) {
if (err) return next(err);
return res.render('myview');
});
});
});
玉石模板看起来像......
- if (user.groupNames.indexOf('admin') > -1)
a.btn.submit Approve Post
- else
p Please wait for management to approve
答案 1 :(得分:1)
Heyo - 我是express-stormpath库的作者,我想我会跳进这里。
我实际上将在不久的将来添加一些新的方法来实现这一点 - 但是现在,您可以做的是将用户的组预加载到数组中,然后检查成员资格。这是一个例子:
app.get('/page', stormpath.loginRequired, function(req, res) {
req.user.groups = [];
req.user.getGroups(function(err, groups) {
if (err) return next(err);
groups.each(function(group, cb) {
req.user.groups.push(group);
cb();
}, function(err) {
if (err) return next(err);
return res.render('myview');
});
});
});
现在您已经定义了req.user.groups
,然后您可以在Jade模板中使用它,如下所示:
- if (user.groups.indexOf('admin') > -1)
a.btn.submit Approve Post
- else
p Please wait for management to approve