Kullanıcının Süper Kullanıcı olup olmadığını nasıl tespit edebilirim?


20

Ziyaretçinin misafir olup olmadığını belirlemek için şöyle bir şey kullanırız:

if ($user->guest) {
echo 'Hello, guest!';
}

Şimdi, ziyaretçinin kayıtlı bir SuperUser (Yönetici) olup olmadığını belirlemek istersem, bunun kodu ne olur?

Ben Joomla Web Sitesi SuperUsers dışında kimse tarafından erişilebilir olmasını istemiyorum bazı harici PHP dosyaları var. Sadece Joomla CMS'yi içe aktararak dosyaları korumaya çalışın.


1
Komik Dün gece buna ihtiyacım vardı ve bir çözüm bulana kadar googled. Benim durumumda araç çubuğunun sadece yöneticiler için gösterilmesi için RSFiles çıktısını geçersiz kılıyordum.
Brian Peat

1
Aslında kabul edilen cevapta bulunan $ user-> get ('isRoot') kullanılmamalıdır. Büyük olasılıkla en son Joomla sürümlerinde (3.6 ve üzeri) JUser :: authorize () dışında bu şekilde çağrıldığında çalışmaz. Bunun yerine dev-m'nin yanıtı gibi $ user-> authorize ('burada paramleriniz') kullanın.
FFrewin

Yanıtlar:


28

bu kodlar, oturum açmış olan kullanıcının süper kullanıcı olup olmadığını belirler -

$user = JFactory::getUser();
$isroot = $user->authorise('core.admin');

bu kod, yalnızca bileşen düzeyinde değil, genel yapılandırmada "Süper Kullanıcı" izniyle nelerin eşlendiğini kontrol eder. Diğer yollarla karşılaştırarak kendiniz kontrol edin.


2
Bu cevaptaki açıklama biraz zayıf, ama bence core.adminkontrol etmek için daha iyi bir izin core.edit.
Brilliand

1
Katılmıyorum. core.admin, genel yapılandırmaya erişimi denetlemek için kullanılan izindir, bu nedenle kullanıcının süper yönetici olup olmadığını kontrol etmenin uygun yoludur. 8. grubu kabul edilen cevap gibi kontrol ederseniz, Joomla! güvenlik uğruna rastgele seçmeye karar verirseniz, betiğiniz bozulur. Daima değişiklik göz önünde bulundurularak kodlayın. Asla yükseltme niyetinde değilseniz.
Mathew Lenning

Bu bir SuperUser kontrolü için en iyi eştir. Hem arıza korumasını hem de SuperUser iznini kontrol eder. github.com/joomla/joomla-cms/blob/staging/libraries/joomla/user/… Diğer alternatif isRoot durumunu doldurmak için yetkilendirmenin zaten kullanıldığını varsayan $ user-> get ('isRoot'). İsRoot, korumalı bir özellik olduğu için doğrudan kullanılabilir. github.com/joomla/joomla-cms/blob/staging/administrator/…
Peter Wiseman

Bu kodun doğru olup olmadığı konusundaki şüpheleri ortadan kaldırmak için: bu kod, kullanıcının süper yönetici olup olmadığını kontrol etmek için Joomla'nın çekirdeğinde (Joomla 3.5.1) kullanılır. libraries/joomla/user/user.phpDosyanın 747. satırında bulabilirsiniz . Bu bir:$iAmSuperAdmin = $my->authorise('core.admin');
itoctopus

8

"Süper Kullanıcı" durumunu belirlemek için kontrol etmeniz gerekir $user->isRoot. Bu özellik, ilk yetkilendirme kontrolü yapıldıktan ve kullanıcının süper yönetici olduğu tespit edildikten sonra ayarlanır.

Ancak, genellikle kullanıcının diğer yanıtlarda açıklandığı gibi belirli izinlere sahip olup olmadığını kontrol etmek daha iyi olur.


3
Bu, $ user-> authorize () işlevinin isRoot özelliğini doldurmak için başka bir şey tarafından çağrıldığını varsayar. Ayrıca isRoot özelliğinin korunduğunu ve bu nedenle $ user-> get ('isRoot') aracılığıyla erişilmesi gerektiğini unutmayın.
Peter Wiseman

6

Bunu dene,

$user  = JFactory::getUser();

$user_groups = $user->groups;

print_r($user_groups);

Bu, varsayılan olarak Joomla Admin kullanıcıları Super admin (Grup 8) ve Yönetici (Grup 7) dizisini döndürür.

Dizinin bu değerlerden herhangi birine sahip olup olmadığını kontrol edebilirsiniz, o zaman Yönetici kullanıcı olmalıdır, Özel Kullanıcı grubu oluşturduysanız, o zaman da kontrol etmeniz gerekir #__usergroups parent Id.

Umarım yardımcı olur..


6

Belirli bir grupta olmayan herhangi bir kişiyi reddetmek için bir koşul kullanabilirsiniz.

$user = JFactory::getUser();
$groups = $user->groups;

if (in_array(8, $groups)):

 //only enter if the user is in the group 8 (group 8 = Super-Administrator)

endif;

1
Sihirli sayı harika bir çözüm değil. Herhangi bir gruba Süper Yönetici izinleri verebilir ve / veya varsayılan Süper Yönetici grubunu silebilirsiniz.
David Hayes

Gibi bir şey kullandım if(in_array(8, $user->groups))ve benim için çalıştı
Linga

4

Oturum açma kullanıcısının süper yönetici veya diğer kullanıcılar olup olmadığını kontrol etmek için aşağıdaki kodu deneyin ...

$user = JFactory::getUser();
$isAdmin = $user->get('isRoot');
if ($isAdmin) {
echo 'You are an Administrator';
}
else  {
echo 'You are not Administrator';
}

OR

function isSuperAdmin()
{
  $user = JFactory::getUser();
  return $user->get('isRoot');
}    

if (isSuperAdmin()) 
{
  echo 'You are an Administrator';
}
else  {
  echo 'You are not Administrator';
}

1
Aslında $ user-> get ('isRoot') kullanılmamalıdır. Büyük olasılıkla en son Joomla sürümlerinde (3.6 ve üzeri) JUser :: authorize () dışında bu şekilde çağrıldığında çalışmaz. Bunun yerine dev-m'nin yanıtı gibi $ user-> authorize ('burada paramleriniz') kullanın.
FFrewin

Önce test edeceğim, işaret ettiğiniz için teşekkürler. :)
saibbyweb

1
$user->get('isRoot');J3.6.2 için çalışmıyor.
saibbyweb

2

Joomla @since 3.2, alan UserGroupList bunu kontrol etmek için kullanır:

$isSuperUser = JFactory::getUser()->authorise('core.admin');

Bu cevap @ dev-m'nin cevabına çok benziyor .
Farahmand

@Farahmand haklısın, Joomla'nın tercih ettiği yöntemin ne olduğunu ve Joomla sürüm 3+ için hala geçerli olduğunu doğrulamak için
ekledim

Tamam. Her neyse, soru zaten joomla-3.x ile etiketlendi .
Farahmand
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.