【问题标题】:Filtering AWS-Cognito users by role按角色过滤 AWS-Cognito 用户
【发布时间】:2017-09-02 07:17:09
【问题描述】:

我整天都在寻找如何做到这一点。

假设我的用户池中有两个用户,John Admin 和 Jim User。我有一个视图控制器,我希望 John Admin 可以访问它,但 Jim User 不能访问它。问题是我不知道如何在我的应用中区分 John 和 Jim。

有没有办法知道 John Admin 在我的管理员组/角色中,但 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"}

【问题讨论】:

    标签: ios swift amazon-web-services amazon-cognito


    【解决方案1】:

    您的 User 模型应该包含一些属性,可以让您按角色区分用户。 例如

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

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

    【讨论】:

    • 已在 Cognito 控制台上为用户分配了组,但我似乎无法找到 API 来获取我在 iOS 中将其分配到的组
    • 你应该尝试获取用户属性docs.aws.amazon.com/cognito/latest/developerguide/…检查段落“Authenticated Example: Get User Attributes”
    • 属性不好,他们没有给我相关信息。
    • docs.aws.amazon.com/AWSiOSSDK/latest/Classes/… 看看方法“--getCredentialsForIdentity:”
    • 我认为答案是建议您使用属性,可能是自定义属性,而不是使用组。如果您需要对客户端进行文字检查,这是一种可行的方法,您提到过您这样做。有了自定义属性,就可以按照他的描述设置和获取。
    【解决方案2】:

    我使用属性解决了这个问题,因为 IdentityID 没有像我想的那样显示嵌入的组。

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

    【讨论】:

      猜你喜欢
      • 2013-01-27
      • 1970-01-01
      • 2019-06-02
      • 2018-07-17
      • 2015-08-15
      • 1970-01-01
      • 2020-09-19
      • 1970-01-01
      • 2019-08-15
      相关资源
      最近更新 更多