عزيزي ... لو اردت ان تجلب العنوان في الرابط .. بإستخدام طريقة البرمجة العادية .. بدون استخدام CI ..
ماذا كنت ستفعل ؟
استاذى almosmm لقد قمت بمتابعة سلسلة الدروس بالكامل وان شاء الله سوف ابدأ اول برنامج لى باستخدام CI قريبا جدا
لدى سؤال الان فى غاية الاهمية
عند عمل لوحة التحكم
فسيكون لها ملف داخل controller باسم admin مثلا ، الا ترى انه سيكون غير طبيعى ان تضيف كل مهام لوحة التحكم فى functions داخل هذا الملف فقط ، لذا يجب ان يكون هناك عدة ملفات للوحة التحكم وايضا يجب ان تكون داخل فولدر خاص لأن البعض يحتاج عمل جدار نارى عليها
اتمنى ان يكون لديك حل لهذه النقطة وشكرا جزيلا لك على هذا الشرح الوافى وان شاء الله سأقوم بترجمة رسائل الخطأ فى الاطار الى اللغة العربية قريبا واضافتها للأعضاء
شكرا لك مرة اخرى
اخي Essam Mohamed
اشكرك على طرح مثل هذه الأسئلة الحساسة والمهمة جداً ...
واجهتني هذه المشكلة سابقا وهي انني لا استطيع ان اضع كل المزايا على شكل Functions في Controller واحد ...
حسناً عزيزي الحل ابسط مما تتصور!
فقط انشئ ملف جديد بأسم admin بداخل مجلد controllers
ثم ضع بداخله ما تريد
الآن إلى ذهبت إلى مجلد الأدمن فقط http://www.example.com/ci/admin سيظهر امامك خطأ وهو بسبب انك لم تدخل إلى Controller معين .. بل دخلت فقط إلى المجلد . ولن يسمح لك CI بمشاهدة المحتوى.
ولكن, لكي تجعل من يدخل إلى مجلد admin فقط , يتم تحويله إلى صفحة الأدمن الرئيسية
سنحتاج ان نستخدم بعض خدع الـ Routing وهي .. افتح ملف config/routes.php
ثم ضع هذا السطر .. ووظيفته .. تحويل من دخل http://www.example.com/ci/admin إلى http://www.example.com/ci/admin/home ( حيث انك ستنشئ Controller بأسم home داخل مجلد Admin وهو الـ Controller الخاص بصفحة الأدمن الرئيسية ) :
الآن فعلياً .. التحويل لن يظهر في الرابط امامك ( كما لو كان الحال بإستخدام تحويل الـMeta ) ... بل ستكون انت بداخل الرابط ci/admin كما انت .. ولكن CI سيظهر لك محتوى ci/admin/homeكود PHP:
$route['admin'] = "admin/home";
الآن .. بخصوص عملية الحماية ... كالعادة .. سأعود واقول ان افضل طريقة لإستخدام نظام العضويات ( سواء كان للوحة التحكم. او للموقع ), هي استخدام مكتبة dx_auth والتعديل عليها في حالة الحاجة لذلك
لو شاهدت موضوعي بخصوص هذه المكتبة ستجد ان هناك Function خاص بالتأكد من الصلاحيات .. تضعه في الصفحة .. ولن يسمح لأحد بالدخول إليها إلا اذا كان Admin ( أي, في مجموعة Admin )
الـ Function هو :
الآن بديهياً .. لا نريد ان تأخذ هذا الـ Function ونكرره في كل الـ Controllers الخاصة بلوحة التحكم !!كود PHP:
$this->dx_auth->check_uri_permission();
بل .. سنقوم بعمل عملية Extending لنظام الـ Controllers بحيث .. بدلاً من ان نقوم بتوريث الـ Controllers كالمعتاد من كلاس ( Controller ) .. سنقوم بتوريثها من كلاس ننشئه نحن ونضع فيه نظام التأكد من الصلاحيات ومن ثم نجعل هذا الكلاس يرث من كلاس Controller
الآن لتمديد الـ Core الخاص بـ CI وبالتحديد في كلاس Controller , الذي نستخدمه في جميع الـ Controllers التي ننشئها .. سنقوم بعمل ملف بسيط ونضع به شروطنا للكلاس الجديد , للمزيد حول تمديد الـ Core شاهد هنا فقرة "Extending Core Class"
حسناً ... اولاً ننشئ ملف جديد بأسم MY_Controller.php ونضعه في مجلد application/libraries
ثم نجعل محتواه كالآتي :
الآن لاحظ بأنني هنا قمت بعمل كلاس جديد , يرث من الكلاس الأصلي والمعتاد وهو Controller ويعمل كما يجب .. الآن قمت بعمل Function بنفس اسم الكلاس بحيث يتم تنفيذ مابه بمجرد تحميل الكلاس نفسه ...كود PHP:
<?php
class Admin_Controller extends Controller {
function Admin_Controller() {
parent::Controller();
$this->load->library('dx_auth');
if($this->uri->segment(2) !== "login" OR $this->uri->segment(2) !== "logout"){
$this->dx_auth->check_uri_permissions();
}
}
}
?>
ومن ثم .. قمت بطلب مكتبة dx auth وقمت بالتأكد اولاً من اننا لسنا بداخل صفحة admin/login او admin/logout لكي نتمكن من تسجيل الدخول والخروج .. فلو افترضنا بأن هذا الشرط غير موجود ... فإنك لن تستطيع حتى الدخول إلى صفحة تسجيل الدخول وسيتم طردك إلى صفحة المنع
الآن نقوم بعمل Controller للصفحة الرئيسية الخاصة بالأدمن ونسميه controllers/admin/home.php
ونضع محتواه كالآتي :
لاحظ من انه في المعتاد .. نقوم بتوريث الـ Controllers من كلاس Controller .. ولكن في هذه المرة .. قمنا بتوريثه من الكلاس الجديد الخاص بنا واسمه Admin_Controllerكود PHP:
<?php
class Home extends Admin_Controller {
function Home(){
parent::Admin_Controller();
}
function Index()
{
echo 'Test!';
}
}
?>
الآن , سيتم عمل تحقق من صلاحية الوصول إلى هذه الصفحة بمجرد ان نقوم بتوريث الـ Controller من كلاس Admin_Controller ...
انتهى
ملاحظة 1 : يقوم فنكشن check_uri_permissions بإرسالك إلى صفحة auth/deny في حالة لم يكن لديك الصلاحية للوصول إلى هذه الصفحة .. يمكنك تعديل هذا الرابط من خلال تعديلك على هذا الفنكشن وبالضبط من ملف application/libraries/dx_auth.php
ارق التحية![]()
شكرا لك وضحت الرؤية وجزاك الله خيرا عن هذا
اعكف حاليا على قراءة دليل الاستخدام الخاص بالاطار واتمنى لو تساعدنى خلال هذا الوقت بالتعديل على نظام القوالب واستخدام كلاس اخونا ضيف بدلا منه لأنى ارى من وجهة نظرى انه الافضل فى التعامل مع القوالب
عزيزي .. نظام القوالب الخاص بـ CI انا شخصياً لا استخدمه,
ولكن يمكنك استخدام سمارتي .. ابحث في المنتدى الخاص بـ CI او الويكي
اما بخصوص إدخال نظام القالب السهل مع CI فاعتقد بانها فكرة رائعة جداً .. ولكن نظراً لإنشغالي حالياً في تجهيز الجزء الخامس من دروس CI وتعريب دليل الإستخدام .. اعتقد بأني سأترك هذه الفكرة الآن ولكن سأضعها في الخطة ان شاء الله .. او ارجوا ان يقوم احد الاخوة بهذه المهمة ( حبذا لو كان الأخ ضيف. حيث انني اعلم بانه من محبي CI)
ارق التحية
شكرا لك وفى انتظار الجزء الخامس من السلسلة وسأحاول ايضا ادخل القالب السهل ان شاء الله ، اما نظام سمارتى فانا لا احبه واعتقادى بان كلاس اخونا ضيف هو الافضل :con2::con2:
الفاضل almosmem
جزيت خيراً على الردود لكن لم اجد ردا منك حتى الان يا حبذا و ياحبذا و ياحبذا لو انك تعجل(لو يمديك الوقت اليوم قبل غداً ) ضع لنا شرحاً لـ :
عمل لوحة تحكم بسيطة لتعديل مكتبة الكتب .
جلب العناوين بالروابط عن طريق لوحة التحكم .
بخصوص الجزء القادم .. بإذن الله سيكون حول استخدام بعض المكتبات المهمة في CI
وايضاً عزيزي لازلت لم افهم ما تقصده بخصوص وضع العنوان في الرابط ...
قم بتنفيذ نفس الفكرة كما لو كنت ستنفذها بدون استخدام CI .. ( بالرغم من انني لم افهم المطلوب بالضبط)
ارق التحية![]()
ياريت تتعجل في طرحه و يكون ايضا استكمال لموضوع مكتبة الكتب .
المطلوب باختصار نعرف ان اـCI مثلا عند طلب كتاب معين سيكون كالاتي :
example.com/ci/books/details/1
1 = id
طيب ودي ايضا اضيف segment جديد بالرابط يحمل عنوان الكتاب يستدعيه من حقل title الان اظنك فهمتني![]()
بسيطة جدا يا غالى فى صفحة الـ view التى ستكون على هذا الشكل
قم باضافة متغير title فى الرابط ليكون بهذا الشكلكود PHP:
<?php foreach ($query->result() as $allbooks) { ?>
<li><a href="books/details/<?=$allbooks->id?>"><?=$allbooks->title?></a></li>
<?php } ?>
كود PHP:
<?php foreach ($query->result() as $allbooks) { ?>
<li><a href="books/details/<?=$allbooks->id?>/<?=$allbooks->title?>/"><?=$allbooks->title?></a></li>
<?php } ?>
يعطيكم العافية
اسألك يا مصعب متى ستطرح الدرس الخامس ان شاء الله فقد طال الانتظار![]()
قمت بتحميل dx auth و لكنها لا تشتغل على السيرفر المحلي طبعاً التنصيب 100% من نقل للملفات كما في دليل الاستخدام و تم زرع قاعدة البياانات المرفقة مع الملف المضغوط .
و بموقعي تشتغل بنفس الخطوات !!! انتظر حل بارك الله فيكم فلا ارتاح بالبرمجة على موقعي مباشرة
و قمت جاهداً بمحاولة تغيير رابط المكتبة ليصبح : index.php/member مكان index.php/auth ففتحت ملف الكونفج تبع المكتبة config/dx_auth.php و استبدلت جميع الروابط التي تحميل auth/* بـ member/* طبعا و غيرت اسم ملف auth.php الموجود بالـcontrollers بـmember.php و لكن يعطيني الصفحة غير موجودة![]()
تم حل جميع المشاكل بحمد الله ، الاول بترقية اصدار اللغة الى 5
و الثاني كله تلاعب بالـURL .
بسم الله الرحمن الرحيم
اولا شكرا لك اخى المصمم على طرحك لشرح هذه الفريم ورك
لدى بعض الاسئلة عن الحماية
انت كتبت فى جزء الحماية انو الفريم ورك تحمى من الxss تلقائيا وبعد ذلك ذكرت انك ممكن تفعلها!
ثانيا : ماذا عن باقى الثغرات
sql
file_include
لانى جربت سويت فورم وضعت بيه كلمة select
وطبعها بطريقة عادية جدا
فكيف ذلك