Erriour
Проверенные
- Сообщения
- 10
- Реакции
- 1
- Баллы
- 3,300
В общих чертах: есть сайт, есть форум. хочу выдавать отдельным пользователям отдельные максимально урезанные права (вплоть до нажатия одной кнопки на выдачу конкретных прав и конкретных статусов).
Значится, логично было бы полезть в базу и поменять значения с правами по шаблону, как выдал кому-то из нормальной админки...
Написал пару функций, но потом понял, что этот "шайтан-движок" запутан ещё больше, чем кажется:
Трёт все права отлично (возвращая к обычному юзеру), с выдачей статусов тоже проблем нет (замена одной ячейки - труда не составляет). Проблема возникает с самими правами, когда есть просто тонны таблиц непонятно для чего, но как они заполняются и чего там происходит - вообще не понятно. То вроде заполняешь пермишены - отваливается весь форум для юзера, то пишет, что нет прав, то вообще никак не реагирует...
В общем, какие есть способы выдать заготовленные права на определённые узлы (один или несколько) без танцев с бубном?
Значится, логично было бы полезть в базу и поменять значения с правами по шаблону, как выдал кому-то из нормальной админки...
Написал пару функций, но потом понял, что этот "шайтан-движок" запутан ещё больше, чем кажется:
PHP:
public function setStatus($member, $group_id, $is_staff){
if (!$user = $this->findXenUser($member['name'], $member['email'])) {
return true;
}
$this->db->prepare("UPDATE " . F_PREFIX . "user SET user_group_id=?, display_style_group_id=?, is_staff=? WHERE user_id=?")
->execute(array(
$group_id,
$group_id,
$is_staff,
$user->user_id
));
return false;
}
public function setRights($member, $group_id, $param_rights, $node_rights, $iter) {
if (!$user = $this->findXenUser($member['name'], $member['email'])) {
return true;
}
switch($group_id){
case 2: //Обычный юзер
if($iter == 1){
$param_rights = 2;
$this->db->prepare("UPDATE " . F_PREFIX . "user SET permission_combination_id=? WHERE user_id=?")
->execute(array(
$this->_convert_encoding(strip_tags($param_rights)),
$user->user_id
));
$this->db->prepare("DELETE FROM " . F_PREFIX . "moderator WHERE user_id=?")
->execute(array($user->user_id));
$this->db->prepare("DELETE FROM " . F_PREFIX . "moderator_content WHERE user_id=?")
->execute(array($user->user_id));
$this->db->prepare("DELETE FROM " . F_PREFIX . "permission_combination WHERE user_id=?")
->execute(array($user->user_id));
}
break;
case 7: //Какая-то группа
case 6: //Какая-то группа
if($iter == 1){
$param_rights = 2;
$this->db->prepare("UPDATE " . F_PREFIX . "user SET permission_combination_id=? WHERE user_id=?")
->execute(array(
$this->_convert_encoding(strip_tags($param_rights)),
$user->user_id
));
$this->db->prepare("DELETE FROM " . F_PREFIX . "moderator WHERE user_id=?")
->execute(array($user->user_id));
$this->db->prepare("DELETE FROM " . F_PREFIX . "moderator_content WHERE user_id=?")
->execute(array($user->user_id));
$this->db->prepare("DELETE FROM " . F_PREFIX . "permission_entry_content WHERE user_id=?")
->execute(array($user->user_id));
$this->db->prepare("INSERT INTO " . F_PREFIX . "moderator (`user_id`,`is_super_moderator`,`moderator_permissions`,`extra_user_group_ids`) VALUES (?, ?, ?, ?)")
->execute(array($user->user_id, 0, "a:0:{}", ""));
}
$this->db->prepare("INSERT INTO `". F_PREFIX ."permission_entry_content` (`permission_entry_id`, `content_type`, `content_id`, `user_group_id`, `user_id`, `permission_group_id`, `permission_id`, `permission_value`, `permission_value_int`) VALUES ('0', 0x6e6f6465, ?, '0', ?, 0x666f72756d, 0x6c6f636b556e6c6f636b546872656164, 'content_allow', '0')")
->execute(array($node_rights, $user->user_id));
$this->db->prepare("INSERT INTO " . F_PREFIX . "moderator_content (`user_id`,`content_type`,`content_id`,`moderator_permissions`) VALUES (?, ?, ?, ?)")
->execute(array($user->user_id, "node", $node_rights, 'a:1:{s:5:"forum";a:1:{s:16:"lockUnlockThread";s:1:"1";}}'));
break;
default:
return true;
break;
}
return false;
}
Трёт все права отлично (возвращая к обычному юзеру), с выдачей статусов тоже проблем нет (замена одной ячейки - труда не составляет). Проблема возникает с самими правами, когда есть просто тонны таблиц непонятно для чего, но как они заполняются и чего там происходит - вообще не понятно. То вроде заполняешь пермишены - отваливается весь форум для юзера, то пишет, что нет прав, то вообще никак не реагирует...
В общем, какие есть способы выдать заготовленные права на определённые узлы (один или несколько) без танцев с бубном?