उपयोगकर्ता सुपर उपयोगकर्ता है तो कैसे पता करें?


20

यह निर्धारित करने के लिए कि आगंतुक अतिथि है , हम कुछ इस तरह का उपयोग करते हैं:

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

अब, अगर मैं यह निर्धारित करना चाहता हूं कि आगंतुक एक पंजीकृत सुपरयूजर (प्रशासक) है या नहीं, तो उसके लिए कोड क्या होगा?

मेरे पास कुछ बाहरी PHP फाइलें हैं जो मैं अपनी जूमला वेबसाइट के सुपरयूजर को छोड़कर किसी के द्वारा भी एक्सेस नहीं करना चाहता। बस जूमला सीएमएस आयात करके फ़ाइलों को सुरक्षित करने की कोशिश कर रहा है।


1
अजीब बात है कि मुझे कल रात इसकी ज़रूरत थी और जब तक मुझे कोई हल नहीं मिल जाता तब तक मैं गुगली करता रहा। मेरे मामले में मैं RSFiles से आउटपुट को ओवरराइड कर रहा था ताकि टूल बार केवल एडिंस के लिए दिखाई दे।
ब्रायन पीट

1
वास्तव में $ उपयोगकर्ता-> प्राप्त ('isRoot') जो स्वीकृत उत्तर में है, का उपयोग नहीं किया जाना चाहिए। नवीनतम Joomla संस्करणों में सबसे अधिक संभावना है (3.6 और बाद में) यह काम नहीं करेगा जब इसे JUser के बाहर कहा जाता है :: प्राधिकरण ()। $ उपयोगकर्ता का उपयोग करें-> अधिकृत करें ('आपके यहाँ परम') इसके बजाय, देव-मी के उत्तर की तरह।
FFrewin

जवाबों:


28

ये कोड निर्धारित करेंगे कि क्या वर्तमान उपयोगकर्ता लॉग इन सुपर उपयोगकर्ता है या नहीं -

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

वह कोड यह जांच करेगा कि वैश्विक कॉन्फ़िगरेशन में "सुपर उपयोगकर्ता" की अनुमति के लिए क्या मैप किया गया है और केवल घटक स्तर में नहीं। अन्य तरीकों से तुलना करते हुए इसकी स्वयं जाँच करें।


2
इस उत्तर में स्पष्टीकरण थोड़ा कमजोर है, लेकिन मुझे लगता core.adminहै कि जांच से बेहतर अनुमति है core.edit
ब्रिलियनड

1
मैं असहमत हूं। core.admin वैश्विक कॉन्फिगरेशन तक पहुंच को नियंत्रित करने के लिए अनुमति का उपयोग करता है, इसलिए यह जांचने का उपयुक्त तरीका है कि कोई उपयोगकर्ता सुपर एडमिन है या नहीं। यदि आप समूह 8 के लिए स्वीकार किए गए उत्तर की तरह जांच करते हैं, अगर जूमला! कभी भी सुरक्षा के लिए इसे रैंडमाइज करने का फैसला करने से आपकी स्क्रिप्ट टूट जाएगी। हमेशा बदलाव को ध्यान में रखते हुए कोड करें। जब तक आप उन्नयन का इरादा नहीं रखते।
मैथ्यू लेनिंग

सुपरयूज़र चेक के लिए यह स्पष्ट रूप से सबसे अच्छा मैच है। यह फेलसेफ के लिए और सुपरयूजर की अनुमति के लिए दोनों की जांच करेगा। github.com/joomla/joomla-cms/blob/staging/lbooks/joomla/user/… अन्य विकल्प $ उपयोगकर्ता है-> ('isRoot') जो मानता है कि अधिकृत पहले से ही isRoot राज्य को आबाद करने के लिए उपयोग किया जा चुका है। IsRoot का उपयोग सीधे तौर पर किया जा सकता है क्योंकि यह एक संरक्षित संपत्ति है। github.com/joomla/joomla-cms/blob/staging/administrator/…
पीटर विस्मैन

यह कोड सही है या नहीं, इस पर कोई संदेह दूर करने के लिए: यह कोड Joomla के कोर (Joomla 3.5.1) में उपयोग किया जाता है, ताकि यह जांचा जा सके कि उपयोगकर्ता सुपर एडमिन है या नहीं। आप इसे libraries/joomla/user/user.phpफ़ाइल की लाइन 747 में पा सकते हैं । यह एक है:$iAmSuperAdmin = $my->authorise('core.admin');
itoctopus

8

"सुपर उपयोगकर्ता" स्थिति निर्धारित करने के लिए आपको जांचना होगा $user->isRoot। यह संपत्ति पहले प्राधिकृत चेक के बाद सेट की गई है और उपयोगकर्ता को सुपर एडमिन होने का पता चला है।

हालांकि आमतौर पर आप वास्तव में बेहतर जांचना चाहते हैं कि क्या उपयोगकर्ता के पास कुछ अनुमतियाँ हैं जैसे अन्य उत्तरों पर वर्णित है।


3
यह $ उपयोगकर्ता को मानता है-> प्राधिकृत () पहले से ही कुछ और द्वारा कॉल किया गया है ताकि संपत्ति को अलग किया जा सके। यह भी ध्यान दें कि isRoot प्रॉपर्टी संरक्षित है इसलिए $ user-> get ('isRoot') के माध्यम से एक्सेस करने की आवश्यकता है।
पीटर विस्मैन

6

इसे इस्तेमाल करे,

$user  = JFactory::getUser();

$user_groups = $user->groups;

print_r($user_groups);

यह एक सरणी वापस करेगा, डिफ़ॉल्ट रूप से जूमला व्यवस्थापक उपयोगकर्ता सुपर एडमिन (समूह 8) और प्रशासक (समूह 7)।

आप देख सकते हैं कि सरणी में इनमें से कोई भी मान है, तो यह व्यवस्थापक उपयोगकर्ता होना चाहिए, यदि आपने कस्टम उपयोगकर्ता समूह बनाया है तो आपको #__usergroups parent Idभी जांचना होगा ।

आशा करता हूँ की ये काम करेगा..


6

आप किसी भी समूह को किसी विशिष्ट समूह में नहीं होने से इंकार करने के लिए एक शर्त का उपयोग कर सकते हैं।

$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
मैजिक नंबर एक महान समाधान नहीं है। आप किसी भी समूह को सुपर एडमिन की अनुमति दे सकते हैं और / या डिफ़ॉल्ट सुपर एडमिन ग्रुप को हटा सकते हैं।
डेविड हेस

मैंने कुछ का उपयोग किया if(in_array(8, $user->groups))और यह मेरे लिए काम किया
लिंग

4

जाँच के लिए नीचे कोड का प्रयास करें यदि लॉगिन उपयोगकर्ता सुपर व्यवस्थापक या अन्य उपयोगकर्ता है ...

$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
वास्तव में $ user-> get ('isRoot') का उपयोग नहीं किया जाना चाहिए। नवीनतम Joomla संस्करणों में सबसे अधिक संभावना है (3.6 और बाद में) जब यह JUser के बाहर इस तरह बुलाया पर काम नहीं करेगा :: प्राधिकृत ()। $ उपयोगकर्ता का उपयोग करें-> अधिकृत करें ('आपके यहाँ परम') इसके बजाय, देव-मी के उत्तर की तरह।
FFrewin

मैं इसे पहले परखूंगा, इशारा करने के लिए धन्यवाद। :)
saibbyweb

1
$user->get('isRoot');J3.6.2 के लिए काम नहीं कर रहा है।
saibbyweb

2

Joomla @since 3.2, फ़ील्ड UserGroupList जाँच करने के लिए इसका उपयोग करता है:

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

यह उत्तर @ dev-m के उत्तर के समान है ।
फरमानंद

@ फरमाँद आप सही हैं, मैंने सिर्फ यह पुष्टि करने के लिए जोड़ा कि जूमला पसंदीदा तरीका क्या है और यह अभी भी जूमला संस्करण 3+ के लिए वैध है
पेड्रो बिचूडो मास्चियो

ठीक है। वैसे भी, इस सवाल को पहले ही joomla-3.x के साथ टैग किया जा चुका है ।
फरहमान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.