【问题标题】:How to make user data private so only user who owns/created data can see it?如何使用户数据私有,以便只有拥有/创建数据的用户才能看到它?
【发布时间】:2018-12-22 03:32:50
【问题描述】:

谁能告诉我我需要使用什么来将用户数据设为私有,只有经过身份验证的用户才能看到他们自己的数据。我应该对我的代码实施什么?

我已经进行了基本身份验证,并且我拥有授权用户,但问题是所有数据都可供所有已登录的经过身份验证的用户使用。我正在使用 PostgreSQL 和 Vapor 3 以及一个带后端的新手。

谢谢!

【问题讨论】:

  • 这是一个范围广泛的问题。您能否举例说明“数据”的含义 - 它是静态数据,例如图像文件还是来自数据库?个人用户是否可以访问所有私人数据或是否存在层次结构?
  • 嘿尼克!数据是指用户已经回答了个人问题,这些答案和结果将保存到数据库中。然后以后用户可以去观看他们自己的答案,而不是其他人。没有层次结构。

标签: backend basic-authentication vapor


【解决方案1】:

如果您已实施基本授权并使用标准 Vapor User 模型,那么您将为每个授权用户拥有一个唯一的 ID。然后,您只需将其作为外键添加到包含您希望保护的数据的每个模型。当用户回答问题时,确保将当前用户的用户 ID 保存到外键字段中。然后,当您希望检索用户的私人数据时,只需选择与相同用户 ID 匹配的那些记录。

要在数据库中创建表,请将其放入模型中:

extension ExampleModel: Migration
{
    public static func prepare(on connection: MySQLConnection) -> Future<Void> {
        return Database.create(self, on: connection) { builder in
            try addProperties(to: builder)
            builder.reference(from: \.userId, to: \User.id)
        }
    }
}

当我创建一个新的(私有)记录时,我将当前用户的 ID 作为参数传递给 init 函数,因此:

init(user:User) throws
{
    createdByUserId = user.id!
    // initialise the remaining fields as well
}

为了将路由中的记录限制为仅由用户创建的记录,我使用:

events.get("/")
{
    req -> Future<View> in
    let query = try Event.query()
    query.filter(\.userID == theUserId )            
    // the rest of your route
}

【讨论】:

  • 希望对您有所帮助。我看到你问了第二个问题,你也感谢回答者,但也没有“接受”答案。如果您接受(通过单击勾号),它会向其他用户显示该答案是有用的(而且,好吧......它会为回答者提供声誉积分!)
  • 嘿抱歉,我还在摸索这个怎么用,天天学习!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-07
相关资源
最近更新 更多