Meteor将CRUD操作限制为管理员或文档所有者

时间:2015-03-26 01:40:46

标签: javascript mongodb security meteor permissions

目前在我的meteor应用程序中,我希望能够将数据库CRUD操作限制为仅文档所有者,或者例如,如果他们具有管理员权限。

我正在使用meteor alanning:roles包,有人可以解释一下我如何能够最好地利用这个包来限制谁可以根据他们的角色创建,阅读或更新文档,或者他们是文档的所有者? / p>

2 个答案:

答案 0 :(得分:0)

这个小代码段是从http://discovermeteor.com借来的。它应该对此事有所启发。

 ownsDocument = function(userId, doc) {
      return doc && doc.userId === userId;
 };

 Posts = new Meteor.Collection('posts');

 Posts.allow({  
      update: ownsDocument         
 });

因为我没有使用角色包,所以我无法提供帮助。但是在快速查看github页面后,它看起来非常简单。

答案 1 :(得分:0)

使用alanning:roles包,您可以使用Roles.userIsInRole(userId,role),其中userId和role是一个字符串。

所以你可以做到以下几点。

Posts.allow({
  update:function(){
     var currentUser = Meteor.user(),
         isUserAdmin = Roles.userIsInRole(currentUser,'Admin');
      if(isUserAdmin){
         console.log("Ok the user is logged in on an admin account, lets allow it to update")
         return true;
      }else{
        console.log("Someone just try to update the document and he isn't logged in into an admin account")
        return false;
    }
  }
})

此外,如果您想要仔细检查用户是admin还是文档owner,请使用||或运营商。

if(isUserAdmin || doc.userId === userId){return true;}