2011-06-28 11 views
10

मैं php में अनुभव वाले किसी से कुछ सुझाव चाहता था।अलग-अलग भूमिकाओं वाले उपयोगकर्ताओं के लिए एक ही पृष्ठ को अलग-अलग प्रदर्शित करना

मैं जो उपयोगकर्ताओं के 4 प्रकार होगा php में एक वेबसाइट बनाने हूँ: तो (अपंजीकृत) 1. अतिथि, 2. पंजीकृत, 3. विशेष privilages साथ पंजीकृत है, 4. व्यवस्थापक

एक ही पृष्ठ उन सभी चारों के लिए अलग-अलग दिखाई देगा।

अभी मैं कर रहा हूँ कि if की स्थिति का उपयोग करके। प्रत्येक पृष्ठ में, मैं उपयोगकर्ता के role और फिर if कथन का उपयोग करके पृष्ठ को प्रदर्शित करने के लिए उपयोग कर रहा हूं।

यह कोड बहुत बड़ा और गन्दा बना देता है और मैं सभी पृष्ठों में बार-बार की स्थिति की जांच करने के लिए है।

  1. क्या ऐसा करने का कोई बेहतर तरीका है?

  2. यह बड़ी पेशेवर वेबसाइटों में कैसे किया जाता है?

  3. विस्तारित प्रश्न: कोहाना 3.1 जैसे एमवीसी ढांचे का उपयोग करके ऐसा करने का सबसे इष्टतम तरीका क्या है? क्या acl के साथ इसका कोई संबंध नहीं है?

+0

विस्तारित उत्तर: हां, एसीएल एक एक्सेस कंट्रोल लिस्ट है। यह मूल रूप से कहता है "यह एक उपयोगकर्ता खाता विवरण पृष्ठ है, इसलिए इसे निम्नलिखित भूमिकाओं से एक्सेस किया जा सकता है: 'पंजीकृत उपयोगकर्ता', 'व्यवस्थापक', 'सुपरसियर', 'भगवान' '। – cypher

उत्तर

5

यह वास्तव में आपकी आवश्यकता पर निर्भर करता है।

उदाहरण के लिए यदि पेज बड़ा हिस्सा है कि पूरी तरह से बदल गया है, क्या मेरा सुझाव है उनके "अनुमति"

$permission = $_SESSION['type_user']; 
include '/path/to/file/with/permission/'.$permission.'/tpl.html'; 

के आधार पर अलग टेम्पलेट बनाने और शामिल उन्हें और पेज में कुछ

के समान है
<?php 
//inside include.php you have the line similar to 
//$permission = isset($_SESSION['type_user']) && $_SESSION['type_user']!=''?$_SESSION['type_user']:'common'; 
require_once '/mast/config/include.php'; 
include '/path/to/file/with/permission/common/header.html'; 
include '/path/to/file/with/permission/'.$permission.'/tpl_1.html'; 
include '/path/to/file/with/permission/common/tpl_2.html'; 
include '/path/to/file/with/permission/'.$permission.'/tpl_3.html'; 
include '/path/to/file/with/permission/common/footer.html'; 
?> 

अगर स्क्रिप्ट "इस पाठ को दिखाने के", या "इस बटन को दिखाने के", आप एक समारोह है कि आप

के लिए अनुमतियों की जाँच करेगा बना सकते हैं जैसे छोटे भागों से भरा हुआ है
<?php 
function can_user($action, $what){ 
    switch($action){ 
     case 'write': 
      return $your_current_if_on_what; 
      break; 
     case 'read': 
     default: 
      return $your_current_if_on_what; 
      break; 
    } 
} 
?> 

and the template will look like: 

[my html] 
<?=can_user('read','button')?'My Button':''?> 
[my html] 

अंगूठे के नियम के रूप में, यदि कोड का एक टुकड़ा 2 गुना से अधिक उपयोग किया जाता है, तो इसे अलग-अलग फ़ंक्शन/फ़ाइल में रखा जाना चाहिए, इसलिए यदि आपके पास कई "आईएफएस" हैं तो आपको एक फ़ंक्शन बनाने की आवश्यकता है

+1

धन्यवाद। हालांकि मुझे समझने में कुछ समय लगा, मुझे मिल गया। किसी भी विचार से बड़ी पेशेवर वेबसाइटों द्वारा यह कैसे किया जाता है? –

+0

बड़ी पेशेवर साइटों के साथ आपका क्या मतलब है निर्भर करता है। मैं बड़ी साइटों के लिए दौड़ता हूं और विकसित करता हूं, और पैरामीटर क्या हैं, इस पर निर्भर करते हुए हर बार एक अलग समाधान होता है। उदाहरण के लिए आपको यह ध्यान रखना होगा कि प्रत्येक बार जब PHP को फ़ाइल सिस्टम तक पहुंचना है, तो इसमें बड़ी प्रदर्शन समस्या है, लेकिन कुछ त्वरक/अनुकूलक अक्सर मदद कर सकते हैं (मैं eAccelerator का उपयोग करता हूं)। – Fabrizio

+0

मेरी आखिरी 2 बड़ी साइटें मैंने उन दोनों के संयोजन का उपयोग किया जहां मैं जिस टेम्पलेट को शामिल करना चाहता था उसे "can_user" में पास कर दिया गया था, और टेम्पलेट का नाम स्वयं या एक अलग टेम्पलेट नाम वापस कर दिया गया था जब उपयोगकर्ता को अनुमति नहीं थी उस भाग को देखने के लिए। कुछ जैसे 'can_user (' read ',' बटन ',' button_html ') शामिल है;' और can_user फ़ंक्शन 'this_user_can $ वापस आ जाएगा?$ टेम्पलेट, 'permission_deny_in_page'; ' – Fabrizio

संबंधित मुद्दे

 संबंधित मुद्दे