在Stormpath-Express

时间:2015-06-28 16:18:25

标签: node.js express pug stormpath

我正在为配置了许多组的公司制作Stormpath-Express应用程序。每个组只能看到页面上的某些元素(即,管理员可以删除和批准帖子,用户只能创建和编辑它们)。是否可以使用Jade创建条件,通过获取用户的组成员身份来显示组件?

这里有一个粗略的例子来说明我的意思:

if user.admin === true
    a.btn.submit Approve Post
else 
    p Please wait for management to approve

我注意到我可以使用user.fullNameuser.email等,但不能使用user.directory

我还使用getDirectory方法

在服务器端尝试了这个
client.getDirectory(href, function(err, dir) {
    console.log(dir);
});

但是,这是来自Node文档,并在应用于我的Express项目时中断。我非常感谢任何帮助,因为我在截止日期前了!

2 个答案:

答案 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