Если вы выполнили базовую авторизацию и использовали стандартную модель Vapor User, у вас будет уникальный идентификатор для каждого авторизованного пользователя. Затем вам просто нужно добавить это как внешний ключ к каждой модели, содержащей данные, которые вы хотите защитить. Когда пользователь отвечает на вопросы, убедитесь, что вы сохранили идентификатор пользователя для текущего пользователя в полях внешнего ключа. Затем, когда вы хотите получить личные данные пользователя, вы просто выбираете те записи, которые соответствуют одному и тому же идентификатору пользователя.
Чтобы создать таблицу в базе данных, поместите это в модель:
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)
}
}
}
Когда я создаю новую (приватную) запись, я передаю идентификатор текущего пользователя в качестве параметра функции 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
}
Вы почти наверняка включили неправильную версию Objectify в свой путь к классам. Убедитесь, что присутствует только версия v6.