2015-06-17 2 views
4

У меня сейчас возникает проблема с пользователями, имеющими доступ к объектам другого пользователя в моем приложении.Настройка ACL для нового пользователя Parse в swift

Я знаю, как установить 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" 
    } 
+0

Подкласс пользователя и объектов для разбора облегчает жизнь. – DogCoffee

ответ

2

Вы должны установить ACL после SIGNUP была завершена.

Таким образом, в методе делегата,

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 - просто установите ACL в коде блока signUpInBackgroundWithBlock, а затем вызвать его сохранить, как только было установлено.

Это то же самое, когда вы хотите создать роль, пользователю нужно уже выходить.

Это, как создать роль в том же теле метода

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

Когда первое изучение синтаксического анализа, я предлагаю создать новых пользователей с помощью this method.

+0

удивительный, спасибо за ответ! Я думаю, что я, должно быть, неправильно спрашиваю об этом ... посмотрев на этот запрос ... возможно, мне нужно искать идентификаторы объектов вместо запроса всего столбца? Я, хотя запрос мог бы видеть, какой объект принадлежал текущему пользователю, но не регистрировал его еще ... Я не знаком с автоматическим заполнением объектных объектов для каждого пользователя с разными объектами .... любой совет по получение объектов более эффективно для данных в моем _User классе? –

+0

См. Ссылку в ответе. Кроме того, идентификаторы объектов создаются автоматически. Никогда не редактируйте их. Пусть анализ позаботится об этом. Если ACL установлен в классе PFUser, тогда другие PFUsers не смогут читать/записывать этого пользователя, следовательно, необходимо для ACL. Если вы хотите получить всех пользователей, то есть Мастер-пользователь, который может получить все, создайте роль. Эта роль будет идентификатором объекта Masters. Поэтому, когда вы теперь создаете нового пользователя, вы связываете этого пользователя с ролью. Таким образом, когда вы, как главный пользователь, можете загружать всех пользователей. Ознакомьтесь с этим https://www.youtube.com/watch?v=RBnVWWqFZX0 для основ анализа. Надеюсь, я немного помог. – DogCoffee

+0

Эй, приятель Im в точке моего приложения, где я пытаюсь создать PFRoles.Я пытаюсь, чтобы пользователь, зарегистрировавшись, был администратором приложения, а затем из приложения мог добавить несколько пользователей с разными привилегиями. У меня возникают проблемы с регистрацией Parse, которую пользователь, созданный мной при регистрации, является администратором. Хостинг вам поможет! Это находится под знаком signbackinbackground с блочным методом var roleACL = PFACL() let role = PFRole (имя: «Администратор», acl: roleACL) role.users.addObject (PFUser.currentUser()!) Role.saveInBackground() –

3

Что такое @DogCoffee, это правильно, но есть еще более простой способ справиться с этим.

В вашем делете делегата внутри вашей функции didFinishLaunchingWithOptions вы можете установить значение по умолчанию, которое всегда будет использовать соответствующий ACL. Вам не нужно вручную устанавливать ACL для регистрации новых пользователей, входа в существующие пользователи, сохранения объектов и т. Д. Это все автоматически.

Вот что мой Анализировать материал в моем приложении делегат выглядит и прекрасно работает:

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) 

Я надеюсь, что помогает. Удачи!

+0

Спасибо, что это здорово! –

Смежные вопросы