如何将用户数据设为私有,以便只有拥有/创建数据的用户才能看到它?

时间:2018-07-13 17:48:59

标签: backend basic-authentication vapor

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您已实现基本授权并使用了标准的“蒸汽用户”模型,则每个授权用户都将具有唯一的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
}