如何将用户数据设为私有,以便只有 owns/created 数据的用户可以看到它?

How to make user data private so only user who owns/created data can see it?

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

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

谢谢!

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

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

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
}