1

私は初めての Web アプリを軌道に乗せようとしているので、これが一種の初心者の質問であることは十分承知しています。

バックエンドにノード、エクスプレス、モンゴを使用し、ストームパスがユーザーのログイン/認証とビューのジェイドを提供しています。ログイン機能は正常に動作します。マネージャーではないユーザーの [新しいスケジュールのアップロード] ボタンを非表示にしたいだけです。

// 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'
   });
});
....

私はこれを使用したい 2 つのグループの人々を持っています: マネージャーと他の全員です。だから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

最初のグループ (管理者) としてログインしていない人にアップロード ボタンを非表示にするにはどうすればよいですか? ミドルウェアはうまく機能します。つまり、マネージャーではない人がそのボタンをクリックしようとするとエラーページが表示されますが、私はむしろそれを非表示にします.

4

1 に答える 1

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

うまくいけば、これは役に立ちました!私はこのライブラリの作成者であり、これに出くわしました =)

私は現在、将来これを簡単にする新しい方法を検討しているので、次の大きなリリースではかなり簡単になることを願っています =)

于 2015-07-20T16:00:57.223 に答える