2017-04-07 5 views
0

Ich habe den ganzen Tag gesucht, wie dies jetzt zu tun ist.Filtern von AWS-Cognito-Benutzern nach Rolle

Angenommen, ich habe zwei Benutzer in meinem Benutzerpool, John Admin und Jim User. Ich habe einen View-Controller, mit dem ich für John Admin, aber nicht für Jim User erreichbar sein möchte. Das Problem ist, dass ich John und Jim in meiner App nicht unterscheiden kann.

Gibt es eine Möglichkeit zu wissen, dass John Admin in meinen Admin-Gruppen/Rolle ist, aber Jim nicht?

edit: Vorstellung für Benutzerattribute gab mir:

{"UserAttributes": [ 
    { "Name": "sub", "Value": "NUMBERS"}, 
    { "Name": "email_verified", "Value": "true"}, 
    { "Name": "phone_number_verified", "Value": "false"}, 
    { "Name": "phone_number", "Value": "NUMBERS"}, 
    { "Name": "email", "Value": "EMAIL"}], 
"Username": "johnadmin"} 

Antwort

1

Ich löste es mit Attributen, weil IdentityID die eingebetteten Gruppen nicht so zeigte, wie ich dachte.

var pool: AWSCognitoIdentityUserPool? 
var user: AWSCognitoIdentityUser? 

Und in meiner Methode von Interesse:

if let strongUser = self.user { 
    strongUser.getDetails().continueOnSuccessWith { (task) -> AnyObject? in 
     DispatchQueue.main.async(execute: { 
      if let response:AWSCognitoIdentityUserGetDetailsResponse = task.result { 
       for attr in response.userAttributes! { 
        if attr.name == "custom:privilege", attr.value == "admin" { 
         self.adminButton.isHidden = false 
         return 
        } 
       } 
      } 
       self.adminButton.isHidden = true 
     }) 
     return nil 
    } 
} else { 
    adminButton.isHidden = true 
} 

Der Nachteil ist, dass, während nicht angemeldet ist, können keine benutzerdefinierten Attribute von der App geschrieben werden, so habe ich den AWS-CLI zu fördern Benutzer:

aws cognito-idp admin-update-user-attributes --user-pool-id <POOLID> --username <USERNAME> --user-attributes '{"Name":"custom:privilege","Value":"admin"}' 
0

Ihr User-Modell sollte eine Eigenschaft enthalten, die die Benutzer durch ihre Rollen unterscheiden können. Z. B

struct User { 
    var name = "" 
    var role = "User" // you can use enum here or anything else you want 
} 

Nach Benutzer bekam angemeldet Sie diese Eigenschaft auf geeigneten Wert eingestellt ist. Bevor Sie den View-Controller präsentieren, sollten Sie diese Eigenschaft überprüfen und entscheiden, ob dieser View-Controller angezeigt werden soll oder nicht

+0

die Benutzer-Gruppen auf der Cognito-Konsole zugewiesen wurden, aber ich kann nicht scheinen, um die API zu finden, welche Gruppe ich in iOS zu –

+0

zugewiesen, es zu erhalten, sollten Sie versuchen Benutzerattributezu erhaltenhttp://docs.aws.amazon.com/cognito/latest/developerguide/using-amazon-cognito-useridentity-pools-ios-sdk.html Abschnitt "Authentifiziertes Beispiel: Benutzerattribute abrufen" –

+0

Kein Glück Mit den Attributen gaben sie mir keine relevanten Informationen. –