2013-05-30 81 views
0

我想获取登录用户的联系人列表,但我无法弄清楚如何找到当前用户。我知道从Parse.com使用Parse.User.current()Stackmob有这样的事情吗?当前在stackmob登录的用户

下面的代码来演示我在找什么。

$(window).load(function() { 
     var user = StackMob.User; 
     var Contacts = StackMob.Model.extend({ schemaName: 'contacts' }); 
     var myContacts = new Contacts(); 
     var q = new StackMob.Collection.Query(); 
     q.equals('sm_owner', user); 
     q.orderAsc('FirstName'); //sort by title in ascending order 
     q.setRange(0, 9); //get the first 10.  second 10 would be setRange(10,19) 
     myContacts.query(q, { 
      success: function (model) { 
       console.debug(model.toJSON()); //JSON array of matching Todo objects 
      }, 
      error: function (model, response) { 
       console.debug(response); 
      } 
     }); 
    }); 

我得到了我一直在寻找使用下面的代码,但是有(“sm_owner”,'用户/托马斯)是有点没用。

$(window).load(function() {    
     var Contacts = StackMob.Model.extend({ schemaName: 'contacts' }); 
     var myContacts = new Contacts(); 
     var q = new StackMob.Collection.Query(); 
     q.equals('sm_owner', 'user/thomas'); 
     q.orderAsc('FirstName'); //sort by title in ascending order 
     q.setRange(0, 9); //get the first 10.  second 10 would be setRange(10,19) 
     myContacts.query(q, { 
      success: function (model) { 
       console.debug(model.toJSON()); //JSON array of matching Todo objects 
      }, 
      error: function (model, response) { 
       console.debug(response); 
      } 
     }); 
    }); 

回答

1

这听起来像你想用StackMob的schema permissions这样做。

例如,您可以设置权限,使用户只能读取他们自己创造contact对象。

当用户创建一个对象时,sm_owner字段被自动设置为当前登录的用户。要利用此优势,您可以设置contacts模式,以仅允许用户阅读他们自己的联系人。这样,由当前用户进行过滤就完成了服务器端,您不必在客户端上专门查询它。

如何进行此设置:

围棋架构配置和编辑选择您的架构。在架构权限下,为Read,UpdateDelete选择Logged In Permissions -> Allow to sm_owner

现在,当您查询contacts架构时,只有contact对象(sm_owner ==当前用户)将被返回。然后,你可以简单地删除此行:

q.equals('sm_owner', 'user/thomas'); 
+0

值得一提的是,如果你尝试获取的东西,你不访问,你会得到一个401未经授权响应。例如,如果只允许读取“任何登录用户”,并且您没有登录,您将得到一个401响应,错误回调将被执行。 –

+0

与此同时,根据Justin的例子,即使数据库中可能有很多联系人,但只有thomas's会被返回,因为Read权限设置为“owner”。因此服务器将只返回允许的对象实例。这就是为什么你可以删除'q.equals'('sm_owner','user/thomas')'行。它会在服务器端自动发生,这要感谢您设置的权限。 –

+0

但是,如果确实需要使用当前用户名建立查询,则可以使用[getLoggedInuser](https://developer.stackmob.com/sdks/js/api#a-getloggedinuser)方法。 – Justin