【问题标题】:Setting ACL for new Parse user in swift快速为新的 Parse 用户设置 ACL
【发布时间】:2015-06-17 03:49:51
【问题描述】:

我目前遇到了一个问题,即用户可以访问我的应用程序中另一个用户的对象。

我知道当用户在已经登录到应用程序时创建对象时如何设置 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"
     }

【问题讨论】:

  • 子类化用户和对象以进行解析也使生活变得更加轻松。

标签: swift parse-platform acl


【解决方案1】:

@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)  

我希望这会有所帮助。祝你好运!

【讨论】:

    【解决方案2】:

    您需要注册完成后设置 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 创建新用户。

    【讨论】:

    • 太棒了,感谢您的回答!我想我一定是查询错了……通过查看该查询……也许我需要寻找objectID而不是查询整个列?我虽然查询将能够看到属于当前用户的对象,但它仍然没有注册它.....我不熟悉为每个具有不同对象的用户自动填充 objectIDS....任何建议为我的 _User 类中的数据更有效地获取对象?
    • 查看答案中的链接。此外,对象 ID 是自动创建的。永远不要编辑那些。让 parse 来解决这个问题。如果在 PFUser 类上设置了 ACL,则其他 PFUser 将无法读取/写入该用户,因此需要 ACL。如果您想获取所有用户,即可以获取所有用户的主用户,请创建一个角色。该角色将是 Masters 对象 ID。因此,当您现在创建新用户时,将该用户与角色相关联。因此,当您作为主用户时,可以获取所有用户。查看 youtube.com/watch?v=RBnVWWqFZX0 了解解析基础知识。希望我有所帮助。
    • 嘿,我在我的应用程序中尝试创建 PFRoles。我试图让用户在注册时成为应用程序的管理员,然后在应用程序内添加多个具有不同权限的用户。我在 Parse 注册时遇到问题,我在注册时创建的用户是管理员。希望您能提供帮助!这是在 signupinbackgroundwith 块方法下 var roleACL = PFACL() let role = PFRole(name: "Administrator", acl: roleACL) role.users.addObject(PFUser.currentUser()!) role.saveInBackground()
    • 当我在应用程序中注册一个新用户时,user.ACL = PFACL(user: PFUser.currentUser()!) user.saveEventually { (results, error) -> Void in if error == nil { let roleACL = PFACL() let role = PFRole(name: user.objectId!, acl: roleACL) role.users.addObject(user) role.saveEventually(nil) } } 如果我想从在应用程序内 - 我使用 cloudCode。我传入新用户的用户名、电子邮件等并创建一个新用户。
    • 感谢 DogCoffee 的回复,在您回复的代码中,我可以将新用户分配给“管理员”角色。我认为“let role = PFRole(name:"Administrator", acl:roleACL) 是我这样做的地方,但您的代码看起来与我发布的有点不同。我希望用户在注册时自动获得管理员权限. Parse 看到创建的新角色,但没有将用户添加到角色中。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多