View_ownモジュールインストール後、Webform投稿ページが表示できなくなった
会員制サイトの構築にあたり、今まではユーザ・プロフィールやユーザ固有コンテンツの表示・非表示をViewsモジュールの閲覧権限の設定や、独自拡張モジュールで対応していましたが、View_ownモジュールを知り、使ってみることにしました。
View_ownモジュールなしの状態は
自分が投稿したコンテンツのみ参照可能"などの権限設定をコンテンツタイプごとに設定出来るようにします。
Drupal標準の権限設定では
- ノード全般の閲覧権限
- 各ノートタイプごとの生成権限
- 各ノートタイプごとの編集権限
- 各ノートタイプごとの削除権限
がown/anyそれぞれで定義可能です。
閲覧に関する権限設定は、ノードタイプごとではなく”全てのノード”に対してです。
View_own拡張モジュールをインストールすると
標準の権限設定に加えてノードタイプごとの own/anyそれぞれの閲覧権限が設定できるようになります。
Webform拡張モジュールへの景況
ところが、View_own拡張モジュールをインストールすると、従来から利用していたWebform拡張モジュールによる投稿ページがスーパーユーザ以外でアクセスするとアクセス権にひっかかって表示できなくなってしまいました。
View_own拡張モジュールとWebform拡張モジュールを同居させるには
View_own拡張モジュールの改造が必要になります。
View_own拡張モジュールの下記部分(Ver 6.x-1.1の場合)
31: function view_own_perm() {
32: foreach (node_get_types() as $type) {
33: if ($type->module == 'node' ) {
34: $perms[] = 'view own '. $type->type .' content';
32: foreach (node_get_types() as $type) {
33: if ($type->module == 'node' ) {
34: $perms[] = 'view own '. $type->type .' content';
を以下のように変更します。
31: function view_own_perm() {
32: foreach (node_get_types() as $type) {
33: if ($type->module == 'node' || $type->module == 'webform') {
34: $perms[] = 'view own '. $type->type .' content';
32: foreach (node_get_types() as $type) {
33: if ($type->module == 'node' || $type->module == 'webform') {
34: $perms[] = 'view own '. $type->type .' content';
上記変更後、以下の要領でWebformコンテンツの一般閲覧を有効にします。
- 管理セクション≫ユーザの管理≫権限ページの「view_own モジュール」以下に「view any webform contentとview own webform content」の権限設定行が増えていますので各ロールに対して有効にします。
- 管理セクション≫コンテンツの管理≫投稿の設定ページの
ノードアクセスの状態:[アクセス権の再構築]をクリックして、変更を反映させます。