web-dev-qa-db-ja.com

eckで作成したエンティティに追加の権限を作成するにはどうすればよいですか?

Entity Construction Kit(ECK) を使用してエンティティを作成し、そのエンティティに対して、ビューの所有、所有の編集、所有の削除などの追加の権限を追加したいと考えています。このスレッドには何らかの動きがあるようです Better Permissions とエンティティの他の一般的なより良い権限を作成するためのいくつかの動きがありますが、自分のカスタムモジュールでそれを行う方法を知りたいです。

サイト上のすべてのユーザーが表示、編集、削除できるようにしたくないので、作成したエンティティに対してこれらのパーマを無効にしました。

私は行き詰まっているので、それに関する良いドキュメントを見つけることができません。

5
7wonders

次を使用してエンティティ情報を変更する必要があります。

hook_entity_info_alter

アクセスコールバックを追加します

例えば:

function EXAMPLE_entity_info_alter(&$entity_info) {
  $entity_info['my_entity']['access callback'] = 'my_entity_access';
}

そしてmy_entity_access

function my_entity_access($op, $entity = NULL, $account = NULL) {
  switch($op){
    case 'view':
    // view check
    // e.g return user_access('view my_entity', $account);
    break;
    case 'create':
    // create check
    break;
    case 'update':
    // update check
    break;
    case 'delete':
    // delete check
    break;
  }
  return FALSE;
}

詳細は node_access を参照してください

hook_permission を使用して、独自の権限を定義することもできます。

6
David Thomas

これが実際の例です:

function my_permission() {
  return array(
    'view own forum post' => array(
      'title' => t('View own forum post'),
      'description' => t('View own forum post.'),
    ),
    'edit own forum post' => array(
      'title' => t('Edit own forum post'),
      'description' => t('Edit own forum post.'),
    ),
    'delete own forum post' => array(
      'title' => t('Delete own forum post'),
      'description' => t('Delete own forum post.'),
    ),
  );
}

function my_entity_info_alter(&$entity_info) {
  $entity_info['forum']['access callback'] = 'my_forum_access';
}

function my_forum_access($op, $entity) {

  global $user;

  $entity_type = $op == 'create' ? $entity : $entity->type;

  if (eck__entity_access($op, $entity_type, $user, 'forum')) {
    return TRUE;
  }

  if ($entity && $entity_type == 'forum_post') {
    switch ($op) {
      case 'view':
        if (user_access('view own forum post', $user) && $user->uid == $entity->uid) {
          return TRUE;
        }
        break;
      case 'update':
        if (user_access('edit own forum post', $user) && $user->uid == $entity->uid) {
          return TRUE;
        }
        break;
      case 'delete':
        if (user_access('delete own forum post', $user) && $user->uid == $entity->uid) {
          return TRUE;
        }
        break;
    }
  }

  return FALSE;
}
2

上記の「より良い権限」の問題には、eckの独自の動作システムを通じて独自の機能への参照があります。ぜひチェックして、フィードバックをお寄せください。

0
fmizzell