3

我正在为一个配置了许多组的公司制作一个 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 项目时会中断。由于我在最后期限内,因此非常感谢您提供任何帮助!

4

2 回答 2

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
于 2015-07-17T12:00:45.800 回答
1

嘿嘿——我是 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
于 2015-06-28T20:41:54.853 回答