Как создать право доступа (permissions) не для роли, а для пользователя. Что бы потом эти права доступа можно было использовать в рулесах, во вьюхах и в своих модулях...
Хотелось бы что бы можно было бы создать право некое и потом назначать эти правила уже пользователям... и что бы эти правила были первоочередными.
т.е. если другие модули запрещают создавать какой-то тип материала, а пользовательское правило дает добро на это то юзер может создать это тип материала в обход других ограничений.
что можете посоветовать в этом вопросе? спасибо.
Комментарии
Это нужно например для следующего:
есть блок, который я не хочу показывать определенным юзерам.
я хочу добавить php код видимости блока, где хочу использовать право доступа (не видеть блоки), которое можно ГДЕ ТО назначить для конкретного юзера.
Активировалось бы правило где нить на аккаунте конкретного юзера. Например в виде поля-чекбокса. Который бы тоже создавался бы.
Может быть достаточно поля чекбокса что бы огранить видимость блока? Т.е. грузим юзера проверяем поле на вкл и даем возможность видить/не видеть блок.
Но хочется одной строчкой - правом доступа.
<?php
if ($account->field_subscription['und'][0]['value'] == '1') {
return FALSE;
}
else {
return TRUE;
}
?>почему не работает код, чего не хватает? я его добавляю в блок в Показывать блок на определенных страницах
аккаунт юзера нужно загрузить?
решил.
<?php
global $user;
$account = user_load($user->uid);
if (
user_access('access mymodule') or ($account->field_hide_block_advertising[und][0][value] == '1')) {return FALSE;
}
else {
return TRUE;
}
?>остался вопрос как права доступа для юзеров создавать
так как хочется пермишенсы во вьюхе и рулесах заюзать
там тоже можно юзать php
Можно создать отдельную роль. Назвать ее мега юзер. Выставить ей нужные пермишенсы и натолкать туда пучок нужных юзеров.
Юзеров можно толкать как в ручную так и программно. Мне думается, такой вариант правильнее впишеться в парадигму друпала.
нет. роли не интересуют. интересно создать список прав и раздавать их юзерам напрямую. в обход ролям
добавь юзерам поле логическое или селект и там указывай их статус (vip,supervip ,супер-перец) и рулесом при изменении этого поля назначай роли
тебе правильно сказали про роли - тут логика есть
просто как их добавлять нужно подумать - я те один вариант предложил
сто ролей не создаш для ста юзеров. а сто прав для ста юзер можно создать. я же вроде написал что нужно. что бы у кажд юзера была страница со списком пермишенсов. которые админ навешивает каждому. комуто один. комуто все сто. причем тут роли. с ролями все понятно. но это не то что нужно.
думаю достаточно будет понять что есть роль в D.
практика:
создаем роль "редактор" включаем в нее право редактирования всех article
создаем роль "посылающий на ..." в нее право посылать на
даем васе пупкину роли редактора и посылающего - он могёт послать и отредактировать
даем лене головач роль посылающего - и она могёт только послать.
Т. о., в сложных ситуациях достаточно планировать присвоение пользователям наборов ролей.
Я понял о чем говорит Инферно, с таким сталкивался на проекте связынным с соц сетями. Инферно погляди OG и там есть модуль OG permissins - помойму так он называется. У него есть возможность доступа к определенной ноде, только членам группы. А еще админ группы может кажому посту группы выставлять права на просмотр/удалени для других челонов группы. В любом случае без самописа не обойдеться, мне так думается.
З.Ы а есть еще taxonomy acess может и он подойдет.
Ну я про самопис и намикаю. Как в своем модуле такое реализовать. Группы юзать не хочется ради этого...
Так ты код, код изучи у этих модулей. А вообще hook_node_grants and hook_node_access_records - это самые лучшие друзья при организации доступа к нужной ноде.
Например такой костыль:
1. Создаешь словарь таксономии "юзеры"
2. В рулсах при создании нового юзера, создаешь в словаре термин с логином юзера
3. В типе материала, добавить ссылку на термин таксономии
4. При создании ноды указывать нужные термины, они же логины юзеров
5. В ноде сделать проверку логина юзера и терминов, если совпадает то вывести ноду, если нет то показать сообщение "нету прав"
Ну или писать модуль примерно с таким функционалом...
мне к нодам доступ не нужен...
блин, где я хоть слово писал о доступе к ноде?
я писал о пермишенсах котрые можно юзерам назначать. каждый пермишенс отвечает за свои действия
Ты вроде спрашивал уже это год назад, так и не нашёл солюшн?
Пока нет. Решения не нашел.
Сори, что-то не сразу понял о чем речь, посмотри вот этот модуль https://drupal.org/project/user_settings_access , по описанию, вроде то что нужно...
я вчера вкл. этот модуль. но дальше етого не продвинулся.
вощем этот модуль 2 пермишинса задает которые дополняют возможности юзеров и все.
-------
подскажите
я создал модуль. прописал там все свои пермишенсы.
можно ли на каждый пермишенс навесить свои условия и действия.
Например. Добавил пермишенс 1 к роли - роль_1, которая должна проверять заполнены ли все поля в профиле юзера. и если заполнены давать возможность например создавать ноды типа news
И что бы потом я в кастомном коде выбирал этот пермишенс для юзера и если он выполнялся то показывался блок, а если нет - не показывался бы.
А не просто если у роли юзера есть такой пермишенс то показывается, если нет - не показывается.
то есть цепочка такая роль_1 -> если поля заполнены то мы этого пользователя толкаем в роль_2 для которой есть возможность постить ноды типа news-> если пользователь по каким то либо причинам отредактировал поля и оставил их пустыми то мы его обратно переводим на роль_1 ?
hook_user_update - при редактировании пользователя
hook_user_insert - при содании нового.
hook_form_FORM_ID_alter (hook_form_user_profile_form_alter) - для добавления своего валидатора на заполнение полей.
<?php
array_unshift
($form['#validate'], 'my_validate_function');?>
Ну как то так.
if(user_access('custom_permission'))
Нет - роль одна у юзера.
Если поля заполнены например в профиле все то пермишенс который есть у его роли, дает возможность создавать тип ноды- новости. если не заполнены то не дает возможность создавать тип ноды - новости.
с этим все понятно, но.
нужно создать пермишенс у которого свои условия и свои действия...
еще раз напишу - МНЕ НЕ ТРЕБУЕТСЯ при наличие некого пермишенса у роли тупо разрешать что либо.
это же if(user_access('custom_permission')) значит что если у юзера не важно какой роли есть пермишенс custom_permission то он что то сделает...
но это не то что мне нужно.
Привожу простой пример.
Юзер зарегистрированный и у него роль - зарегистрированный пользователь соответственно.
У юзера в аккаунте создано логическое поле типа вкл/выкл.
В своем модуле создан новый пермишенс - delete block (он вывелся в списке прав и выставлен у роли - зарегистрированный пользователь).
Требуется в своем модуле добавить логику для этого пермишенса которая решала бы задачу.
Если юзер поставил чекбокс в акаунте, то при наличие... пермишенса у его роли скрывать блок имеющий id=666.
Если не стоит галка то показывать блок с id=66 даже при наличие пермишенса
//$custom_perms - извлекаем из свое собственной базы которую мы до этого создали
// это у нас просто галочки которые на странице пользователя присутствуют. Они ведь где то хранятся?
foreach ($custom_perms as $id =>$perm) {
$user->custom_permp[$id] = $perm;
}
}
function hook_block_view_alter(&$data, $block) {
global $user;
$user_profile = profile_user_load($user);
//$id - определим через foreach
if(!empty($user_profile->custom_profile[$id])) {
// полет фантазии для блока вплоть до
unset($data['content']);
}
}
ну как то так
Так что есть какое нить решение понятное что бы если пермишнес не назначен не одной роли эту пермишенс можно было назначить конкретному юзеру???