(Jade& Stormpath)仅在特定用户访问页面时才显示某些HTML元素

时间:2015-07-18 18:47:57

标签: node.js express pug stormpath

我正试图让我的第一个网络应用程序开始,所以我很清楚这是一个初学者的问题。

我使用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将上传按钮隐藏给未登录为第一组(经理)的人?中间件工作得很好,如果他们试图点击该按钮,那么非经理人就会得到一个错误页面,但我宁愿隐藏它。

1 个答案:

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

希望这有用!我是这个图书馆的作者,偶然发现了这个=)

我目前正在寻找新方法,以便将来更轻松,所以希望在下一个大版本中它会更简单=)