Я работал над веб-приложением для компании, которая помогает им в цитировании, управлении запасами и выполнении заданий. Мы считаем, что приложение будет полезно для других компаний в отрасли, но я никоим образом не хочу развертывать отдельные экземпляры приложения, поэтому мы делаем его многопользовательским (или многопрофильным может быть более подходящим термином, так как каждая компания имеет несколько пользователей).
Он встроен в Codeigniter (жаль, что я сделал это в Rails, хотя сейчас уже слишком поздно), и я попытался следовать подходу с использованием модели тощего контроллера. Я просто хочу убедиться, что я делаю авторизацию правильно. Когда пользователь входит в систему, я сохраняю идентификатор компании вместе с идентификатором пользователя в сеансе. Я думаю, что каждая таблица, с которой пользователь взаимодействует, должна иметь дополнительное поле companyID
(таблицы, к которым косвенный доступ осуществляется через отношения, вероятно, не должны будут хранить тоже companyID, скажите, если я ошибаюсь). Получение данных кажется довольно простым, просто добавьте дополнительное условие where в AR, чтобы добавить идентификатор компании в выборку, например, $this->db->where('companyID', $companyID)
. Я в порядке с этим.
Тем не менее, я хотел бы знать, как обеспечить пользователям возможность изменять данные только в пределах их собственной компании (в случае, если они отправляют, скажем, запрос на удаление в произвольный quoteID, используя firebug или аналогичный инструмент). Один из способов, о котором я подумал, - это добавить вышеупомянутое условие where к каждому методу обновления и удаления в моделях. Технически это сработало бы, но я просто хотел знать, правильно ли это делать, или у кого-то были другие идеи.
Другой вариант - проверить, не принадлежала ли компания пользователя записи до изменения, но это похоже на удвоение количества запросов к базе данных, и я не знаю, есть ли какая-то польза от этого .
Я удивлен, что не смог найти ответ на этот вопрос, я должен искать неправильные термины: с. Но я был бы признателен за любые ответы на эту тему.
Заранее спасибо,
Christian