Bagaimana cara mendeteksi jika pengguna adalah Pengguna Super?


20

Untuk menentukan apakah pengunjung adalah tamu , kami menggunakan sesuatu seperti ini:

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

Sekarang, jika saya ingin menentukan apakah pengunjung adalah Pengguna Super (Administrator) terdaftar atau tidak, apa kode untuk itu?

Saya memiliki beberapa file PHP eksternal yang saya tidak ingin dapat diakses oleh siapa pun kecuali SuperUsers dari Situs Joomla saya. Hanya mencoba mengamankan file dengan mengimpor Joomla CMS.


1
Lucu aku butuh ini tadi malam dan hanya mencari di Google sampai aku menemukan solusi. Dalam kasus saya, saya mengganti output dari RSFiles sehingga bilah alat hanya muncul untuk admin.
Brian Peat

1
Sebenarnya $ user-> get ('isRoot') yang ada di jawaban yang diterima, tidak boleh digunakan. Kemungkinan besar dalam versi Joomla terbaru (3.6 dan yang lebih baru) itu tidak akan berfungsi ketika dipanggil seperti ini di luar JUser :: authorize (). Gunakan $ user-> otorisasi ('params Anda di sini') sebagai gantinya, seperti jawaban dev-m.
FFrewin

Jawaban:


28

kode-kode ini akan menentukan apakah pengguna yang masuk saat ini adalah pengguna super atau tidak -

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

kode itu akan memeriksa apa yang dipetakan ke izin "Pengguna Super" dalam konfigurasi global dan tidak hanya pada tingkat komponen. Periksa sendiri dibandingkan dengan cara lain.


2
Penjelasan dalam jawaban ini agak lemah, tapi saya pikir core.adminlebih baik izin untuk memeriksa daripada core.edit.
Brilliand

1
Saya tidak setuju. core.admin adalah izin yang digunakan untuk mengontrol akses ke konfigurasi global, jadi ini adalah cara yang tepat untuk memeriksa apakah pengguna adalah admin super. Jika Anda memeriksa grup 8 seperti jawaban yang diterima, jika Joomla! pernah memutuskan untuk mengacaknya demi keamanan, skrip Anda akan rusak. Selalu kode dengan perubahan pikiran. Kecuali jika Anda tidak pernah berniat untuk memutakhirkan.
Mathew Lenning

Ini jelas yang paling cocok untuk pemeriksaan SuperUser. Itu akan memeriksa baik untuk failafe, dan untuk izin SuperUser. github.com/joomla/joomla-cms/blob/staging/libraries/joomla/user/... Alternatif lainnya adalah $ user-> get ('isRoot') yang mengasumsikan bahwa otorisasi telah digunakan untuk mengisi keadaan isRoot. IsRoot dapat digunakan secara langsung karena merupakan properti yang dilindungi. github.com/joomla/joomla-cms/blob/staging/administrator/…
Peter Wiseman

Hanya untuk menghapus keraguan apakah kode ini benar atau tidak: kode ini digunakan dalam inti Joomla (Joomla 3.5.1) untuk memeriksa apakah pengguna adalah admin super atau tidak. Anda dapat menemukannya di baris 747 libraries/joomla/user/user.phpfile. Ini yang ini:$iAmSuperAdmin = $my->authorise('core.admin');
itoctopus

8

Untuk menentukan status "Pengguna Super", Anda harus memeriksa $user->isRoot. Properti ini disetel setelah pemeriksaan otorisasi pertama dilakukan dan pengguna dideteksi sebagai super admin.

Namun biasanya Anda memang lebih baik ingin memeriksa apakah pengguna memiliki izin tertentu seperti yang dijelaskan pada jawaban lain.


3
Ini mengasumsikan $ user-> authorize () telah dipanggil oleh orang lain untuk mengisi properti isRoot. Perhatikan juga bahwa properti isRoot dilindungi sehingga perlu diakses melalui $ user-> get ('isRoot').
Peter Wiseman

6

Coba ini,

$user  = JFactory::getUser();

$user_groups = $user->groups;

print_r($user_groups);

Ini akan mengembalikan array, Secara default Joomla Admin pengguna Super admin (Grup 8) dan Administrator (Grup 7).

Anda dapat memeriksa array memiliki nilai-nilai ini maka itu harus menjadi pengguna Admin, Jika Anda membuat grup Pengguna Kustom maka Anda harus memeriksa #__usergroups parent Idjuga.

Semoga ini bisa membantu ..


6

Anda dapat menggunakan kondisi untuk menolak siapa pun yang tidak berada dalam grup tertentu.

$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
Angka ajaib bukanlah solusi yang bagus. Anda dapat memberikan izin Super Admin ke grup mana pun dan / atau menghapus grup Super Admin default.
David Hayes

Saya menggunakan sesuatu seperti if(in_array(8, $user->groups))dan itu berhasil untuk saya
Lingga

4

Coba kode di bawah ini untuk memeriksa apakah pengguna login adalah admin super atau pengguna lain ...

$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
Sebenarnya $ user-> get ('isRoot') tidak boleh digunakan. Kemungkinan besar dalam versi Joomla terbaru (3.6 dan yang lebih baru) itu tidak akan berfungsi ketika dipanggil seperti ini di luar JUser :: authorize (). Gunakan $ user-> otorisasi ('params Anda di sini') sebagai gantinya, seperti jawaban dev-m.
FFrewin

Saya akan mengujinya terlebih dahulu, terima kasih telah menunjukkan. :)
saibbyweb

1
$user->get('isRoot');tidak bekerja untuk J3.6.2.
saibbyweb

2

Joomla @since 3.2, bidang UserGroupList menggunakan ini untuk memeriksa:

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

Jawaban ini sangat mirip dengan jawaban @ dev-m .
Farahmand

@Farahmand Anda benar, saya baru saja menambahkan untuk mengonfirmasi apa metode yang disukai Joomla dan bahwa itu masih berlaku untuk Joomla versi 3+
Pedro Bicudo Maschio

Baik. Bagaimanapun, pertanyaan sudah ditandai dengan joomla-3.x .
Farahmand
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.