Добавление постов и их просмотр под авторизованным пользователем

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
denis2488
Сообщения: 5
Зарегистрирован: 2022.09.29, 12:55

Добавление постов и их просмотр под авторизованным пользователем

Сообщение denis2488 »

Имеются 2 таблицы в БД "user" и "requests". Есть поле user_id в таблице "requests" оно связано с полем "id" в таблице "user". В поле user_id руками установлено значение по умолчанию (id конкретного пользователя). Если задать поле значение null, добавленных постов не видно. Как правильно добавить связь между таблицами, чтобы поле user_id заполнялось автоматически при добавлении поста id-шником авторизованного пользователя? А у пользователя admin, были права на просмотр всех постов добавленных пользователями.

Таблица "user":

Код: Выделить всё


CREATE TABLE `user` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(255) NOT NULL COLLATE 'utf8_unicode_ci',
`auth_key` VARCHAR(32) NOT NULL COLLATE 'utf8_unicode_ci',
`password_hash` VARCHAR(255) NOT NULL COLLATE 'utf8_unicode_ci',
`password_reset_token` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`email` VARCHAR(255) NOT NULL COLLATE 'utf8_unicode_ci',
`status` SMALLINT(5) NOT NULL DEFAULT '10',
`created_at` DATE NOT NULL,
`updated_at` DATE NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `username` (`username`) USING BTREE,
UNIQUE INDEX `email` (`email`) USING BTREE,
UNIQUE INDEX `password_reset_token` (`password_reset_token`) USING BTREE

Таблица "requests":

Код: Выделить всё


CREATE TABLE `requests` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`user_id` INT(10) NOT NULL DEFAULT '19',
`theme` VARCHAR(255) NOT NULL COLLATE 'utf8mb4_0900_ai_ci',
`email` VARCHAR(255) NOT NULL COLLATE 'utf8mb4_0900_ai_ci',
`service` VARCHAR(255) NOT NULL COLLATE 'utf8mb4_0900_ai_ci',
`category` VARCHAR(255) NOT NULL COLLATE 'utf8mb4_0900_ai_ci',
`priority` VARCHAR(255) NOT NULL COLLATE 'utf8mb4_0900_ai_ci',
`text` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_0900_ai_ci',
`filename` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_0900_ai_ci',
`created_at` DATETIME NULL DEFAULT NULL,
`updated_at` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `user_id` (`user_id`) USING BTREE,
CONSTRAINT `requests_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE ON DELETE RESTRICT


Связь с User в модели Requests:

Код: Выделить всё


public function getUser (): ActiveQuery
{
    return $this->hasOne(User::class(),['id'=>'user_id']);


Контроллер:

Код: Выделить всё


public function actionIndex()

{
    $searchModel = new RequestsSearch();
    $user_id = Yii::$app->user->id; // ID пользователя
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);


    return $this->render('index',
        [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,

    ]);
}


Модель RequestsSearch:

Код: Выделить всё


$user_id = Yii::$app->user->id;;
    $query->andFilterWhere([
        'id' => $this->id,
        'user_id' => $user_id

Аватара пользователя
leonenco
Сообщения: 155
Зарегистрирован: 2017.01.30, 22:42

Re: Добавление постов и их просмотр под авторизованным пользователем

Сообщение leonenco »

Вам нужно посмотреть RBAC и как оно работает.
Аватара пользователя
Ghost_nsk
Сообщения: 825
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск
Контактная информация:

Re: Добавление постов и их просмотр под авторизованным пользователем

Сообщение Ghost_nsk »

привязку юзера можно закинуть в beforeSave в модель или в контроллер, в зависимости от типа задач

Код: Выделить всё

if(!Yii::$app->user->isGuest){
  $model->user_id = Yii::$app->user->id; 
}
по доступу админа, смотрите или RBAC как тут сказали выше, или пишите свою проверку доступа типа

Код: Выделить всё

if(UserHelper::checkIsOwner($post->user_id) || UserHelper::checkIsAdmin()){
  // доступ к записи
} else {
  // нет доступа
}
Ответить