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


12

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?

Yanıtlar:


12

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.


1
Çok basit? 'Çok basit bir çözüm' diye bir şey yoktur. Karmaşıklık kendi başına bir hedef değildir, değil mi? Belki Googletorp'un cevabı özel sorununuzu çözmez, ancak bu durumda daha ayrıntılı olmanız ve nedenini açıklamamanız gerekir.
marcvangend

@marcvangend Geç olmasına rağmen, bunun sorumun cevabı olmadığını fark ettim. Umarım bazıları daha iyi bir cevap ekleyebilir
Fahad Ur Rehman

@Fahad Daha iyi yanıtlar almak için daha iyi sorular sormanız gerekir. Googletorp'un yanıtı benim için iyi bir çözüm gibi görünüyor ve upvotes kabul ediyor gibi görünüyor. Sorununuzu çözmezse, sorunuzu düzenleyin ve ilgili tüm ayrıntıları ekleyin.
marcvangend

@marcvangend aslında sorunum çözüldü ve cevabı daha önce kabul ettim ama yorumun ışığında. Googletorps'un itibarı çok yüksektir, cevabını kabul edersem veya kabul etmezsem hiçbir fark görmez. Ona oy verdim mükemmel bir alternatif çözüm sağladı.
Fahad Ur Rehman

@Fahad Kabul ederek bir cevap diyorsunuz: bu cevap sorunumu çözdü. Bu güçlü bir ifadedir ve ziyaretçilerin gelmesi, bir cevabın faydalı olup olmadığını öğrenmek için çok yararlıdır. Cevabım sorununuzu çözmediyse, sorunuzu düzenlemeli ve çözümümün neden işe yaramadığına ve marcvangend'in dediği gibi biraz ayrıntı göndermelisiniz, daha fazla ayrıntı ekleyin.
googletorp

3

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.

Düğüm Sayfası Görünümünü Kısıtla , belirli içerik türündeki düğümlere doğrudan erişimi kısıtlamanın daha iyi bir yolu gibi görünüyor.

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 sonra kendi 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.


1

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 "Düğüm Sayfası Görünümünü Kısıtla" Bakımcısından isterler.

"Düğüm Sayfası Görünümünü Kısıtla" nın 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 ...

"Düğüm Sayfası Görünümünü Kısıtla" seçeneğine karşı dezavantaj:

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

1

kullanmanız gerekir node_access(), kullanarak kolayca uygulayabileceğiniz bazı seçenekler vardır hook_node_access(). Uygulama node_access(), 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 vermenizi sağlar. Ancak, görünümler yine de bu düğümlerden veri alabilir.

hook_node_access () , düğüm_akışı ()


0

Https://www.drupal.org/project/restrict_node_page_view esinlenerek küçük bir modül kendiniz 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;
}

Bu modülden birkaç yıl önce bahsedilmişti. Cevabınızın konuya getirdiği yenilikleri açıklayabilir misiniz?
Mołot

@ Mołot - ... kendiniz bir modül yazmak için. Düzenlenmiş cevap.
leymannx

0

Kurallar 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 "eylemi" uygulamak için (ör. Yöneticilerin bir düğümü görüntülemek için bu yolları kullanmaya devam etmesini) 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. Ardından, kendi ortamınıza sığdırmak için daha fazla düzenleme / rafine edin (örn. "Üzgünüz, ..." mesajı gösterilecektir).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.