2017-04-07 162 views
0

我一直在寻找如何做到这一点的工作。按角色过滤AWS-Cognito用户

比方说,我的用户池中有两名用户,John Admin和Jim User。我有一个视图控制器,我想让John Admin可以访问,但不是Jim用户。问题是,我不知道如何在我的应用程序中区分John和Jim。

有没有办法知道约翰管理是在我的管理组/角色,但吉姆不是?

编辑: 要求用户属性递给我:

{"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"} 

回答

1

我解决了它使用属性,因为身份证并没有显示嵌入我的想法。

var pool: AWSCognitoIdentityUserPool? 
var user: AWSCognitoIdentityUser? 

而我感兴趣的方法中:

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 
} 

的缺点是,虽然没有登陆,没有自定义属性可以通过应用程序写入,所以我用了AWS-CLI推广用户:

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

您的用户模型应该包含一些属性,让你通过自己的角色区分用户。 E.g

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

用户登录后应该将此属性设置为适当的值。 进一步呈现视图控制器之前,您应该检查此属性,并决定显示或不显示此视图控制器

+0

的用户已分配的Cognito Console组,但我似乎无法找到的API来获取我赋予它iOS中 –

+0

你应该尝试的用户属性这组http://docs.aws.amazon.com/cognito/latest/developerguide/using-amazon-cognito-user-identity-pools-ios-sdk.html 检查段落“Authenticated Example:Get User Attributes” –

+0

没有运气与属性,他们没有给我相关的信息。 –