为 swift 中的新 Parse 用户设置 ACL

Setting ACL for new Parse user in swift

我目前 运行 遇到一个问题,即用户可以访问我应用中另一个用户的 object。

我知道当用户创建 object 时他们已经登录到应用程序时如何设置 ACL,但我不知道如何为注册的人设置 ACL。当我设置导航标题以显示用户的 ["BusinessName"] 列时,我收到来自另一个创建的用户列的公司名称....感谢您的帮助!!非常感谢!

 @IBAction func signupFinalButton(sender: AnyObject) {

  var newUser = PFUser()
  newUser.username = username
  newUser.password = password
  newUser.email = email
  newUser["FirstName"] = firstName
  newUser["LastName"] = lastName
  newUser["BusinessName"] = businessName
  newUser["City"] = city
  newUser["State"] = state

  // This isn't seeming to work...
  newUser.ACL = PFACL(user: PFUser.currentUser()!) 
  or this 
  newUser.ACL = PFACL(user: PFUser())

  newUser.signUpInBackgroundWithBlock({ (succeed, error) -> Void in

或者我查询的解析有误?我是新来的。

     func navTitle () {
     var user = PFUser.currentUser()
     var query = PFQuery(className:"_User")
     query.findObjectsInBackgroundWithBlock {
    (objects: [AnyObject]?, error: NSError?) -> Void in

     if error == nil {
     if let objects = objects as? [PFObject] {
     for object in objects {

     self.homeScreen.title = object["BusinessName"] as! String?
      }
     }else {

     self.homeScreen.title = "Home"
     }

您需要在 注册完成后设置 ACL

所以在委托方法中,

func signUpViewController(signUpController: PFSignUpViewController, didSignUpUser user: PFUser)

// set the ACL for the newly created user

newUser.ACL = PFACL(user: PFUser.currentUser()!)

//Then you can save the user, ie saveEventaully 

如果您不使用 PFSignUpViewController - 只需在 signUpInBackgroundWithBlock 的代码块中设置 ACL,然后在设置后调用保存。

创建角色时也是如此,用户需要已经存在。

这是在同一个方法体内创建角色的方法

let role = PFRole(name: user.objectId!, acl: roleACL)
role.users.addObject(user)

第一次学习解析时,我建议通过 this method 创建新用户。

@DogCoffee 说的是对的,但是还有更简单的处理方法。

didFinishLaunchingWithOptions 函数内的应用委托中,您可以设置一个默认值,该值将始终使用适当的 ACL。您无需手动设置 ACL 来注册新用户、登录现有用户、保存对象等。这一切都是自动的。

这是我的应用程序委托中的 Parse 内容,效果很好:

ParseCrashReporting.enable()
Parse.enableLocalDatastore()

Parse.setApplicationId("<YOUR APP ID>", clientKey: "<YOUR CLIENT KEY>")

//Always set the ACL value to the current user
PFACL.setDefaultACL(PFACL(), withAccessForCurrentUser: true)  

希望对您有所帮助。祝你好运!