답변:
일부 사이트에서 사용한 UI 접근 방식은 노드 옵션 무시 모듈이며, 다른 답변에서 제공하는 것과 유사한 권한을 추가합니다.
우리는이를 위해 항상 컨텐츠 게시 모듈을 사용합니다. 노드에 여러 세분화 된 권한과 게시 / 게시 취소 탭을 추가합니다.
이 모듈
- 세분화 된 게시 및 게시 취소 권한을 활성화합니다.
- 글로벌 (모든 콘텐츠 게시 / 해제)
- "노드 유형"당 (모든 [노드 유형] 컨텐츠를 게시 / 해제)
- 사용자 당 (자신의 [노드 타입] 컨텐츠 게시 / 해제)
- 한 번의 클릭으로 게시 취소 / 게시를 위해 "게시 / 게시 취소"탭을 노드 페이지에 추가합니다.
- 뷰에 대한 게시 / 게시 취소 링크를 제공하여 검토 자, 편집자 및 게시자를위한 워크 플로를 능률화합니다.
- 가볍고 항상있을 것입니다.
위의 방법에 비해 몇 가지 이점을 제공 하는 개정 모듈 을 사용하는 것이 좋습니다 . 물론 모듈은 완전히 유지 관리되는 모듈이므로 코드에 많은 관심과 버그 수정이있을 것입니다. 둘째, 전반적인 워크 플로에 더 많은 기능을 제공합니다.
사용 사례를 들어 그들은 기본적으로 자신의 콘텐츠를 완화 할 수 있도록, 사용자은 "창조자"권한과 "사회자"권한을 모두 제공하지만, 모듈 설명에서 말한 것처럼, 그들은되어 있지 '신과 같은 등의 제공과 같은 권한을 부여 관리 노드 '줄 것이다.
이 작업을 수행하는 모듈이 있지만 이름을 기억할 수 없습니다. 실제로 모듈이 취한 접근 방식이 너무 번거 롭다고 생각했습니다. 실제 중요한 코드가 실제로 한 줄의 권한 논리로 싸여있을 때 많은 코드가있었습니다.
이것은 내 코드 버전입니다.
function MYMODULE_perm() {
$perms[] = 'administer status of any content';
foreach (node_get_types() as $type) {
if (isset($type->type)) {
$perms[] = 'administer status of any '. check_plain($type->type) .' content';
$perms[] = 'administer status of own '. check_plain($type->type) .' content';
}
}
return $perms;
}
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
if ($form['#id'] == 'node-form' && $form_id == "{$form['#node']->type}_node_form" && _MYMODULE_access($form['#node']->type)) {
if ($form['options']['#access'] == FALSE) {
$form['options']['#access'] = TRUE;
}
}
}
function _MYMODULE_access($type) {
return user_access('administer status of any content')
|| user_access('administer status of any ' . check_plain($type) . ' content')
|| user_access('administer status of own ' . check_plain($type) . ' content');
}
사용자가 자신의 모든 콘텐츠 유형과 모든 콘텐츠 유형을 게시 / 게시 취소 할 수있는 몇 가지 추가 권한이 추가되어 원하는 방식을 설정할 수 있습니다.
Drupal 7에 맞게 다른 모듈을 추가하지 않으려는 경우 Decipher 응답을 업데이트하고 마녀 솔기가 가장 좋은 방법입니다.
/**
* Implements hook_permission().
*/
function MYMODULE_permission() {
$perms = array(
'administer status of any content' => array(
'title' => t('Administer status for all content type'),
'description' => t(''),
'restrict access' => true
),
);
foreach (node_type_get_types() as $type) {
if (isset($type->type)) {
$perm_types = array(
'administer status of any '. check_plain($type->type) .' content' => array(
'title' => t('Administer status of any '. check_plain($type->type) .' content'),
'description' => t(''),
),
'administer status of own '. check_plain($type->type) .' content' => array(
'title' => t('Administer status of own '. check_plain($type->type) .' content'),
'description' => t(''),
),
);
$perms = array_merge($perms,$perm_types);
}
}
return $perms;
}
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
if (preg_match('/_node_form$/', $form_id) && _MYMODULE_access($form['#node']->type)) {
if ($form['options']['#access'] == FALSE) {
$form['options']['#access'] = TRUE;
}
}
}
function _MYMODULE_access($type) {
return user_access('administer status of any content')
|| user_access('administer status of any ' . check_plain($type) . ' content')
|| user_access('administer status of own ' . check_plain($type) . ' content');
}
그만큼 콘텐츠 액세스 모듈은 당신이 원하는 것을 포함해야한다.
이 모듈을 사용하면 역할 및 작성자별로 컨텐츠 유형에 대한 권한을 관리 할 수 있습니다. 각 컨텐츠 유형에 대한 사용자 정의보기, 편집 및 삭제 권한을 지정할 수 있습니다. 선택적으로 컨텐츠 별 액세스 설정을 사용할 수 있으므로 각 컨텐츠 노드에 대한 액세스를 사용자 정의 할 수 있습니다.