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

标签 node.js express pug stormpath

我正在努力让我的第一个网络应用程序启动,所以我很清楚这是一个初学者问题。

我使用 Node、express 和 Mongo 作为后端,Stormpath 提供用户登录/身份验证和 jade View 。登录功能工作正常,只是我想为非管理员用户隐藏“上传新计划”按钮:

// 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对未作为第一组(管理员)登录的人隐藏上传按钮?中间件工作得很好,也就是说,如果不是经理的人尝试单击该按钮,他们会收到一个错误页面,但我宁愿隐藏它。

最佳答案

您需要在这里做的是:

  • 在路由代码中预加载您想要执行的权限检查。
  • 将其传递到您的模板中。
  • 在模板中使用此变量来显示或不显示内容。

以下是它如何适用于您的用例:

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

希望这对您有帮助!我是这个库的作者,只是偶然发现了这个 =)

我目前正在寻找新的方法来使将来变得更容易,所以希望在下一个大版本中它会变得更加简单 =)

关于node.js - (Jade & Stormpath) 仅在特定用户访问页面时显示某些 HTML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31494417/

相关文章:

xml - Node SOAP WSDL 请求不完整(仅某些 block )

javascript - 创建 Instagram API 地理订阅时出现 CORS 问题

javascript - Jade mixin 迭代 json

node.js - 如何在 mongoose 中使用查询修饰符?

mongodb - 我的 .js 文件应该放在哪里?

forms - 使用nodejs和connect-form上传文件

node.js - 使用 IISNode 在 IIS 中托管 Nodejs 应用程序时如何启用静态文件(和较少的支持)

javascript - 我可以将哈巴狗(ex-jade)与 react 框架一起使用吗?

javascript - 如何在 pug 和 javascript 中滚动并加载更多 json 数据?

javascript - Nodejs 将文本转换为 JSON