Пожалуйста, потерпите меня, потому что я новичок в программировании / cakephp, но я не знаю, как запретить пользователю доступ к другим данным пользователя.Когда пользователь входит в систему, он получает панель со своими списками (которые представлены несколькими моделями .... ресторанов, отелей, полей для гольфа, изображениями для каждого списка, информацией о местоположении, купонами и т. Д.).
В зависимости от модели / контроллера, я мог бы иметь пользователя '3' (у которого есть списки отелей), набрать в строке браузера / restaurant / edit / 1 и отредактировать информацию о ресторане пользователя '17', у которого естьресторан с ID = '1'.Хуже того, они могут даже получить доступ к / users / dashboard / 17.Как мне ограничить доступ пользователей только к своим данным?Я надеялся, что в AuthComponent есть какая-то часть beforeAllow (), которую я мог бы использовать в AppController, который заранее проверяет идентификатор пользователя и возвращает его обратно на свою панель мониторинга, если они пытаются выполнить действие CRUD над данными других пользователей.
Даже если бы я использовал ACL (я знаю, что должен, но, честно говоря, это слишком сложно для меня на данном этапе обучения), мне все равно придется знать правильный код, чтобы ограничить доступ пользователей, верно?
Ниже мой AppController:
class AppController extends Controller {
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array('controller' => 'users', 'action' => 'view'),
'logoutRedirect' => array('controller' => 'docs', 'action' => 'index'),
'authError' => 'Sorry, you are not authorized to view this page.'
)
);
function beforeFilter() {
$this->Auth->userModel = 'User';
$this->Auth->allow('join_now','debug','index', 'condos', 'houses', 'hotels_and_motels', 'print_all_coupons', 'print_coupon', 'search', 'golf', 'charters', 'events', 'nightlife', 'shopping', 'visitors_info', 'contact_us', 'view', 'results');
}
}
, а вот примерная функция редактирования (функция редактирования из моего UnitsController):
function edit($id) {
$this->set('title', 'Edit your property');
$this->Unit->id = $id;
if (empty($this->request->data)) {
$this->request->data = $this->Unit->read();
} else {
if ($this->Unit->saveAll($this->request->data)) {
$this->Session->setFlash('Your property has been updated.', 'success');
}
}
}
Я скажу, что каждыйодна из моих таблиц базы данных имеет поле user_id, поэтому зарегистрированный пользователь может быть сопоставлен с user_id каждой модели.
Я думал, что этот вопрос SO был тем, что я искал, но онизакончил тем, что начал касаться его и никогда не отвечал на первоначальный вопрос, заданный пользователем.