Görünümlere saygı duymak hook_node_access


14

hook_node_access()Kullanıcıların özel ölçütlere göre bazı düğümlere erişimini reddetmek için kullanıyorum . Ancak, kullanıcı bu ölçütleri geçmezse bu içeriğin onu listeleyen bir görünümde görünmesini istemiyorum. hook_node_access()Uygulamalara saygı göstermenin bir yolu var mı?


Views modülü ayarlanan erişim iznine gerçekten uymuyorsa hook_node_access(), yapılması gereken sadece bir şey vardır: Views modülü kodunu değiştirmek için.
kiamlaluno

Düğüm aslında tamamen node_load ile yüklenene kadar kanca tetiklendi sanmıyorum, bu yüzden muhtemelen hala neden bu yüzden. Ancak hook_node_access () uygulaması insanları kilitlemek için kullanır filtreleme için aynı yöntemi kullanacak bir filtre eklentisi üzerinde çalışmaya başladım. Bu filtreyi tüm görüşlerime eklemeyi hatırlamam gerekecek ve çalışmalı. Bir kez ben diğerleri benifit böylece bittiğinde ben burada bilgi ile alacak.
nenne

Tamam, bu yüzden benim kullanım durumum şuydu: Müşteri herhangi bir düğüm için 10 erişim seviyesi istiyor ve kullanıcılar erişim seviyelerinin altındaki tüm düğümleri görebilmelidir. Bu, standart düğüm görünümü için hook_node_access ile kolayca çözüldü. Ancak, görünümler bu saygı vermedi gibi ben argüman için özel php kodu ile bağlamsal bir filtre oluşturdu. Php kodu temelde kullanıcıların erişim seviyesi için düşük veya eşit değerleri (uygun sözdizimiyle, ile ayrılmış) döndürdü. Bu çözümün dezavantajı, her görünümün bu yapılandırmaya ihtiyaç duymasıdır.
nenne

Bu sorunla ilgili görüşler için bir sorun buldum, aynı zamanda sorunu çözmenin uygun bir yolunu da ifade ediyor: drupal.org/node/1266388 .
nenne

2
Sorunun nasıl çözüleceği hakkında bir cevap yazabilirseniz, bu tamamen kabul edilebilir; merlinofchaos'un dediği gibi, Views modülü düğümleri bir veritabanı sorgusu kullanarak yüklüyor ve bu nedenle hook_node_access()uygulamalara saygı gösterilmiyor. "Tasarım gereği" olduğu gibi, bir çözümün bildirilmesi iyidir.
kiamlaluno

Yanıtlar:


6

Aynı soruyu bir süre önce burada da yaşadım .

hook_node_accessviewsveya tarafından tanınmıyor menus. Sadece son savunma hattı olarak kullanılmalıdır.

Denetim düğümü erişim için daha iyi bir yolu aracılığıyla hook_node_access_recordsve hook_node_grantsaçıklanan burada ve burada .



1

Views, görüntülenecek düğümleri belirlemek için SQL kullanır. Ne yazık ki, performans nedenleriyle Drupal'ın tüm potansiyel adaylar üzerinde bir düğüm_yüklemesi gerçekleştirmesi ve ardından hepsinin her birinde hook_node_access'i çağırması mümkün değildir. Binlerce düğümü gösteren bir görünüm düşünün (özellikle bir çağrı cihazı kullanırken). Mantık SQL'de yapılmazsa, çağrı cihazları çok olağandışı işlevselliğe sahip olur, böylece Drupal bunu veritabanınızdaki erişim kayıtlarını kullanarak belirtilen rik olarak zorlar.

Access_records yapmak adil bir miktar daha fazla iş ancak SQL ile çalışmasını sağlayacaktır. Bu nedenle, muhtemelen erişim kayıtları kullanılarak uygulanacak ve böylece görünümlerle çalışacağından, işlevselliğinizi mümkün olan her yerde çözmek için mevcut bir node_access modülünü kullanmanızı öneririm.

Erişim kayıtları aşağıda görüldüğü gibi node_access tablosunda saklanır : resim açıklamasını buraya girin Her sütun için yapılan yorumlar sayesinde amaçlarını anlayabilirsiniz. Alemi, düğüm erişimi için kullanılan sistem ve gid'i bir alem içindeki grup olarak düşünün. Bu grubun görüntüleme, güncelleme ve silme izinleri olabilir. Genel olarak her node_access modülü bir veya daha fazla alanı tanımlar (bazen birden fazla node_access modülü paralel olarak da çalışabilir). Bir kullanıcının alemlerin her birinde bir veya daha fazla gidmesi vardır.

Drupal'da "node_access" etiketine sahip tüm sorgulara otomatik olarak bazı özel mantık eklenir. Etiketleme hakkında daha fazla bilgi için belgelere bakın . Bu özel mantık, her bölge için "node_access" tablosuna katılır ve "gid" in bir kullanıcıya uygulanan gidilerden birine eşit olduğu durumda, kullanıcının uygun izne sahip olması koşulunu ekler.

Bu tüm sistem, tüm sorguların node_access'i, hatta sorguları vb. Mümkün olduğunda, mevcut bir node_access modülünü kullanmak size tüm baş ağrısını kurtarabilir.

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.