Ограничение доступа с помощью Rules

Главные вкладки

Аватар пользователя aquamaster aquamaster 7 декабря 2013 в 8:47

На сайте есть нода, предоставляющая некий сервис с помощью полей, видимых для роли "Авторизированный пользователь". Необходимо ограничить доступ к этому сервису в ноде с помощью следующей конструкции:

Если юзер (роль "Авторизированный пользователь") посетил ноду (номер ноды Х) более чем N раз в течении срока (скажем, 1 месяц), то поменять роль для такого юзера (выполнившего перечисленные условия) на другую роль ("Авторизированный пользователь 2 без доступа к полям ноды Х") на определённый срок (к примеру, 1 месяц). Плюс выслать письмо на ящик этого юзера с уведомлением: [юзер], вы превысили лимит посещений страницы [титл ноды Х], доступ к ней ограничен на срок [срок ограничения].

Вроде бы всё просто, весь необходимый функционал для такого решения предоставляет Друпал - включены модули Rules, Date, Token, Statistics. После танцев с модулем Rules стало очевидно, что такую конструкцию невозможно выполнить из-за отсутствия персональных счётчиков посещений для каждого юзера. Д.орг перекопал в поиске подобных модулей статистики, не нашёл нужного. Сниппетов подобных счётчиков тоже не нашёл.
Может кто уже двигался в этом направлении, подскажите.

Комментарии

Аватар пользователя Sandy Big Boy Sandy Big Boy 7 декабря 2013 в 9:16

Да вроде ничего сложного не должно быть, я делал похожее для учета посещений, только не нод, а страниц views, вернее даже не страниц, а количества отображений на страницах views каждого материала.
Я так думаю можно создать материал со следующими полями: ID ноды (или, наверное можно и URL), пользователь, количество посещений ноды. И перед отображением ноды проверять значения в этом материале.
Более правильно, наверное будет сделать свой модуль, который будет работать с таблицей в базе, т.к. материал с тремя полями - это более сложный запрос, чем запрос к одной таблице с тремя полями.

Аватар пользователя Sandy Big Boy Sandy Big Boy 7 декабря 2013 в 13:49

"gedeon" wrote:

https://drupal.org/project/user_stats[/quote]

Оттуда:

Provides commonly requested user statistics for themers, IP address tracking and Views integration. Statistics are:

days registered;
join date;
days since last login;
days since last post;
post count;
login count;
user online/offline;
IP address;

Не вижу того, что нужно ТС.

Аватар пользователя gedeon gedeon 7 декабря 2013 в 14:43

"Sandy Big Boy" wrote:
ТСу надо сколько раз юзер посещал

его не просто понять, но я понял, что ещё и это надо.

тогда

https://drupal.org/project/nodeviewcount

«Unlike statistics module, this module records each view of node with user uid and timestamp. So now you can know how many times a user viewed node by day, week, month and etc»

Аватар пользователя aquamaster aquamaster 7 декабря 2013 в 16:26

"Sandy Big Boy" wrote:
Не вижу того, что нужно ТС

Совершенно верно, этот функционал более всего подходит для форумов (вывод доп.информации о юзере).

"Sandy Big Boy" wrote:
материал со следующими полями: ID ноды (или, наверное можно и URL), пользователь, количество посещений ноды

Пытался добавить эти поля в существующий тип материала, но таких полей в списке нет. Может имелось ввиду сделать views с такими полями, но при выборе формата Поле таких полей, кроме Nid, тоже нет. Или я что-то не так понял.

Мне кажется, перед формированием ноды сначала идёт проверка данных того юзера, кто запрашивает эту страницу, а потом уже всё остальное построение. И поэтому в БД уже должна храниться статистика по каждому пользователю, открывшему ранее эту ноду, вернее, данные суммирующего счётчика для конкретного юзера по этой ноде. А это уже кастомный модуль как минимум с одной таблицей.
Как-то сумбурно написал.

Аватар пользователя aquamaster aquamaster 7 декабря 2013 в 17:23

Оно, то что нужно!

Модуль интегрирован с Views, создаёт страницу просмотров в админке по выбранным типам материалов и выбранным ролям. При создании views-страницы можно добавлять критерии фильтрации 1.Node id и 2.Who view of node, а это то, что нужно из всего, что можно. Т.е. в БД будет постоянно обновляться таблица по количеству просмотров зарегеных юзеров по нужным нодам. А уже вытянуть оттуда данные для Rules - дело техники.
Хреново то, что делаю эту статистику для нового сайта, куда таблица юзеров перенесена, но посещений ещё нет. Т.е. нет статистики и проверить пока невозможно. Но это вопрос времени.

Спасибо за диалог gedeon и Sandy Big Boy!

Аватар пользователя Sandy Big Boy Sandy Big Boy 7 декабря 2013 в 23:21

Да, может может быть https://drupal.org/project/nodeviewcount и то что надо. В каком-то проекте и его пытался использовать. Но моя задача была более сложная.
Если через Rules нужные данные удастся вытянуть, то гуд.