【问题标题】:show records based on user role根据用户角色显示记录
【发布时间】:2015-06-09 00:21:11
【问题描述】:

我有一个具有角色的应用程序,例如“用户、管理员”。在控制器中,我检查用户是否为管理员“req.user.roles.indexOf('admin') > -1”以显示所有记录,否则仅显示用户记录。我想知道是否有更好的方法来做到这一点,或者这是要走的路。谢谢

代码

    /**
 * List of Articles
 */
exports.list = function (req, res) {
  if (req.user.roles.indexOf('admin') > -1) {
    Article.find().sort('-created').populate('user', 'displayName').exec(function (err, articles) {
      if (err) {
        return res.status(400).send({
          message: errorHandler.getErrorMessage(err)
        });
      } else {
        res.json(articles);
      }
    });
  }else {
    Article.find({user:req.user._id}).sort('-created').populate('user', 'displayName').exec(function (err, articles) {
      if (err) {
        return res.status(400).send({
          message: errorHandler.getErrorMessage(err)
        });
      } else {
        res.json(articles);
      }
    });
  }
};

【问题讨论】:

  • 我会将 req.user.roles.indexOf('admin') > -1 重构为类似 hasRole(role) 的方法,使其更通用。
  • 感谢 Abhishek 说得通。除此之外没有办法绕过if else?我还想稍微缩短我的代码:)
  • 在下面查看我的答案。- 不符合作为答案的条件,但将所有这些都放在评论中看起来不太好。

标签: angularjs node.js express mongoose


【解决方案1】:

您还可以用另一种方法(可能在不同的模块 - userController 中)重构数据库访问位,这将使您的代码更具可读性。这不符合作为答案的条件,但将所有这些都放在评论中看起来不太好。

exports.list = function (req, res) {
  if (hasRole('admin')) {
    userController.getAllRecords(req, res);
  } else {
    userController.getRecordsById(req, res)
  }
};

【讨论】:

    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    相关资源
    最近更新 更多