web-gelistirme-sc.com

Düğümlere doğrudan erişimi nasıl kısıtlayabilirim?

Düğümlere doğrudan erişimi kısıtlamak, ancak görünümlerin belirli düğüm türünün gerekli alanına erişmesine nasıl izin verilir?

Örneğin, Slayt Gösterisini Görüntüleme'de, belirli düğüm türüne ait görüntü alanını kaydırıyoruz. Ancak arama motorlarının erişmesini ve ziyaretçilerin bu düğüm türüne ait düğümlere erişmesini istemiyoruz.

Herhangi bir öneri?

12
Fahad Ur Rehman

User1 tarafından eklenen düğümleri yayından kaldırırsak, kullanıcı o içerik türünün içeriğini düzenleme haklarına sahip olsa bile başka bir kullanıcı tarafından düzenlenemez.

Kısıtla Node Sayfa Görünümü herhangi bir düğüme doğrudan erişimi kısıtlamanın daha iyi bir yolu gibi görünüyor belirli içerik türünden.

Kullanımı da oldukça basittir, bu modülü etkinleştirmeniz ve normal olarak doğrudan erişilebilen düğümlerin izinlerini yapılandırmanız yeterlidir.

http://drupal.org/project/restrict_node_page_view

Proje sayfasından:

Hiç yayınlamanız gereken bir slayt gösterisi nodetype kullandınız, ancak düğümün kendi başına düğüm/XXX yolunu kullanarak erişilebilir olmasını istemiyor musunuz? Bu modül tam size göre!

Bu modülle, nodetiplere ve izinlere dayalı olarak düğüm sayfalarına (düğüm/XXX) doğrudan erişimi devre dışı bırakabilirsiniz.

Modülü etkinleştirin ve izinlerinizi yapılandırmayı unutmayın.

3
Fahad Ur Rehman

Basit bir çözüm, erişilebilir olmasını istemediğiniz düğümleri yayınlamamak olabilir. Görünümler yine de bu düğümlerden veri alabilir.

12
googletorp

Aynı şeyi ancak daha fazla işlevsellik ile yapan başka bir modül.

Tavşan Deliği

Bu projenin sürdürücüsü, konulardaki projeleri birleştirmek için "Kısıtla Node Sayfa Görüntüleme" Bakım Sahibinden isterler.

"Kısıtla Node Sayfa Görüntüleme” ye karşı avantajlar:

  • Düğümde aynı ana işlevsellik ancak kullanıcılar/dosyalar/sınıflandırma terimleri için genişletilebilir
  • Modülünüzde kullanılabilir
  • İçerik türünde veya her içerikte global olabilir
  • Proje sayfasında daha fazlasını görün ...

"Kısıtla Node Sayfa Görünümü" ne karşı dezavantaj:

  • Daha fazla kod muhtemelen daha az etkili (testlere ihtiyaç var, kanıtlanmadı)
1
Payou

node_access() kullanmalısınız, hook_node_access() kullanarak kolayca uygulayabileceğiniz bazı seçenekler vardır. node_access() uygulanması, bir düğüme kimlerin erişebileceği ve bu düğümü kimlerin oluşturabileceği, silebileceği, düzenleyebileceği veya güncelleyebileceği konusunda karar vermenize olanak tanır. Ancak, görünümler yine de bu düğümlerden veri alabilir.

hook_node_access () , node_access ()

1
gauravjeet

Rules modülünü kullanarak aşağıdakine benzer bir kural uygulayabilirsiniz:

{ "rules_check_url" : {
    "LABEL" : "Disallow node/* access",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "init" : [] },
    "IF" : [
      { "text_matches" : {
          "text" : [ "site:current-page:url" ],
          "match" : "node\/\\d+$",
          "operation" : "regex"
        }
      }
    ],
    "DO" : [
      { "drupal_message" : {
          "message" : "Sorry, direct access to URLs like [site:current-page:url] is not allowed around here ...",
          "type" : "error"
        }
      },
      { "redirect" : { "url" : "no_access" } }
    ]
  }
}

Yukarıdaki kural (henüz) yalnızca "seçilen" rollere "eylem" i uygulamak için (örneğin yöneticiler bir düğümü görüntülemek için bu yolları kullanmaya devam edebilir) dikkate almaz. Ancak Kurallar modülüne biraz aşina olan herkes için, bu basit bir ileri "Koşul" eklemek ...

Bu kuralı kendi sitenizde denemek için yukarıdaki Kurallar kodunun tamamını kopyalamanız ve "İçe Aktar" işleviyle oluşturulan kendi sitenizdeki yeni bir Kural'a yapıştırmanız yeterlidir. Daha sonra kendi ortamınıza sığdırmak için daha fazla düzenleme/iyileştirme yapın (örneğin gösterilecek "Üzgünüm, ..." mesajı).

0
Pierre.Vriens

https://www.drupal.org/project/restrict_node_page_view esinlenerek kendiniz küçük bir modül yazabilirsiniz:

/**
 * Implements hook_node_access()
 */
function MYMODULE_node_access($node, $op, $account) {

  // Default checks
  if (!is_object($node)) {
    return NODE_ACCESS_IGNORE;
  }

  $type = is_string($node) ? $node : $node->type;

  if($op == 'view' && arg(0) == 'node' && arg(1) === $node->nid) {

    // Restrict access to full MYTYPE node for anon users
    if ($type == 'MYTYPE' && user_is_anonymous()) {
      return NODE_ACCESS_DENY;
    }
  }
  // Default
  return NODE_ACCESS_IGNORE;
}
0
leymannx