صفحة 1 من 2 12 الأخيرةالأخيرة
النتائج 1 إلى 15 من 23

الموضوع: أفضل الطرق لبناء تراخيص الأعضاء المعقدة؟

  1. #1
    عضو فعال
    تاريخ التسجيل
    Dec 2008
    المشاركات
    1,897

    أفضل الطرق لبناء تراخيص الأعضاء المعقدة؟



    السلام عليكم و رحمة الله و بركاته.
    اقوم بحمد الله و منته ببناء كائن(كلاس) يشكل مكتبة أعضاء كاملة و قد أممت كل شيء بحمد الله و فضله و حوله و قوته ، حتى وصلت الى نقطة التراخيص فعجزت صراحه عن إيجاد حل مثالي للمشكلة ، طبعاً المكتبة تتمحور حول جدولين :
    جدول الأعضاء :
    Userid;
    username;
    ...
    group_id; //foreign key
    جدول المجموعات:
    groupid;
    group_title;
    group_description:
    طبعاً لم أضع جميع الحقول و لم اشأ وضع تجربتي في كتابة الكود حتى لا أربط تفكيركم بحل المشكلة بل أريد إقتراحاتكم .
    و التراخيص ستخول لنا :
    إعطاء الأعضاء التراخيص مثلا الكتابة في قسم المقالات مع منه من الكتابة في قسم الاستشارات مثلا او حظره من الدخول للقسم الفلاني ..يعني المسألة معقدة شيئاً ما لكن لست مستحيلة .
    بارك الله في كل مسلم على الأرض ووفقه لخيري الدنيا و الآخرة .
    ربي اغفر لي و لوالدي و للمؤمنين يوم يقوم الحساب.
    سبحانك اللهم و بحمدك أشهد أن لا إله إلا انت أستغفرك و أتوب إليك .





    التعديل الأخير تم بواسطة وضاء ; 30-07-2010 الساعة 06:41 AM
    __________________
    راسلني


  2. #2
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    يجب بناء جدول اخر يحوي تراخيص كل مجموعة
    ومن ثم عمل نظام شبيه بعض الشيء بنظام ال hooks
    يعني عند كل حدث نشغل دالة تفحص اذا كان الحدث من صلاحيات المجموعة ام لا
    يعني لحدث اضافة تعليق

    كود PHP:
    function add_comment($data)
    {
    if (
    has_prev($_SESSION['user_id'],'add_comment'))
    {
    //add comment
    }








  3. #3
    عضو فعال
    تاريخ التسجيل
    Dec 2008
    المشاركات
    1,897


    أهلا و سهلا بك صاحبي و حبيبي في الله أحمد،
    هلا فصلت المسألة قليلاً (حقول جدول التراخيص ، مثلا على دالة مستعملة في التحقق من التراخيص؟) .
    و بارك الله في جهدك هذا .





    __________________
    راسلني

  4. #4
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    table name:group_prev

    id
    group_id
    action_id
    ==============
    كود PHP:
    function has_prev($uid,$action_name){
    $group_id=get_group_id($uid);
    $action_id=get_action_id($action_name);
    return 
    mysql_num_rows(mysql_query("select id from group_prev where group_id='$group_id' and action_id='$action_id'"))>0;
    }
    =================
    $action_arr =array('0'=>'add_comment');
    function 
    get_action_id($action_name){
    global 
    $action_arr;
    return 
    array_search($action_name,$action_arr);

    احفظ الاحداث في مصفوفة لأنك لن تحتاج للتعديل عليها إلا اذا عدلت على الكود بشكل فعلي
    يعني إلا اذا اضفت اكواد
    يعني لن يأتي زائر ويقوم باضافة\تعديل\حذف حدث بدون ان يعدل على الكود
    لذلك لا حاجة لأن يكون هذا القسم تفاعليًا





    التعديل الأخير تم بواسطة ahmad sadiq ; 30-07-2010 الساعة 07:34 AM

  5. #5
    عضو نشيط
    تاريخ التسجيل
    Apr 2010
    المشاركات
    95


    السلام عليكم
    مارأيك لو في جدول الأقسام نضع حقل اسمه Banned_groups يحتوي على ارقام المجموعات الممنوعه
    او العكس
    نضع حقل اسمه ok_groups يحتوي على المجموعات المسموحه
    وتكون في صفحة اضافة القسم كقائمة متعددة الإختيار Multi Select وتكون هكذا ارقام المجموعات
    1,5,6 داخل الحقل

    ثم عند دخول العضو للقسم نقوم بالإستعلام عن هل رقمه موجود ام لا في الحقل ؟ بواسطة IN
    كود PHP:
    $user_group $_COOKIE['group'];
    $query mysql_query("SELECT * FROM `section` WHERE `id`='".$id."' AND ".$user_group." IN `ok_groups`");
    if(
    mysql_num_rows($query) == 0){
    die(
    "انت ممنوع!");

    هذه واحده من الطرق ويوجد اكثر من طريقة للتحقق من ان العضو مسموح له ام لا
    , لكن المهم هنا هي فكرة وضع ارقام المجموعات المسموح لها بالتصفح لااعلم تفيدك ام لا .





    التعديل الأخير تم بواسطة Fahad Salem ; 30-07-2010 الساعة 07:34 AM

  6. #6
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    اخي فهد سليم اكيد نظام group_ok افضل لأن الأصل في نظام الصلاحيات هو المنع
    طريقتك مشابهة لما كتبت
    الفرق الوحيد هو اني عملت normalization لجدول الصلاحيات
    وهو افضل عند التعديل على الصلاحيات من لوحة التحكم
    ولكن ايضًا طريقتك لها محاسنها

    تعليق اخر وهو حفظ رقم المجموعة في العكعة وهو خطأ فادح
    اعلم انك كتبت الكود مسرعًا لكن احببت ان انبه






  7. #7
    عضو فعال
    تاريخ التسجيل
    Dec 2008
    المشاركات
    1,897


    أعزائي أحمد و سليم ، جعل الله ما كتبتهماه ذخراً لكما يوم القيامة.
    لكن جميع الحلول تبدو لي حتى الآن ليست عملية فلا يعقل أن أضع في كل جزئية من الصفحة دالة تقوم بعمل استعلام! لو لدي موقع مثل المواقع الاجتماعية تضع لك مئة خاصية في الصفحة الواحدة ، فهل هذه الطريقة تصلح لي؟ و كيف بي انا مبرمج يطلب مني مئة عميل برمجية ؟ اذن سأقضي وقتي كله في كتابة الدوال و تغيير رقم الترخيص .
    يبدو ان هناك مربطاً نفقده لازلنا نجري وراءه لعله ينير لنا درب اكمال هذا الكائن.
    الكائن كله يعتمد على الجلسات و لا يمت بصلة بالكعكعات و كل شيء مشفر و محمي بحمد الله .





    __________________
    راسلني

  8. #8
    عضو نشيط
    تاريخ التسجيل
    Apr 2010
    المشاركات
    95


    مرحباً ...
    الأخ احمد نعم اعلم انه خطأ لكنه كمثال سريع فقط :nice:

    الأخ وضاء , الآن انت لديك جدول دعنا نقل عنه جدول للأقسام مثلاً
    ولديك معلومات العضو جميعها ...


    مالمشكله هنا ؟ لم افهم مالذي تريد استخراجه بالضبط , هل جميع ماتريد استخراجه موجود في جدول واحد كـ "مواضيع" أو أقسام او ماشابه ... إذاً لاضرر ولا ضغط ولا بطئ سيحصل منها

    كود PHP:
    $user_id '5';
    $query mysql_query("SELECT * FROM `things` WHERE ".$user_id." IN `ok_group`");
    while(
    $rows mysq.....){
    echo 
    $rows['s'];


    مقصدي هو ماتقصده انت "بالخواص" لماذا لايكون بجدول بالقاعده يتم التنفيذ منها و فيها حقل بالمجموعات المسموحه
    هكذا ستقوم بإستعمال استعلام واحد وتقوم بالتكرار

    كأنك تستخرج مواضيع مثلاً , لكنك تستخرج خواص !

    المعذره اذا كنت لم افهم ...
    أيضاً لااخفيك اني بصراحه ليس لدي خبره في المشاريع الكبيره و تخفيف الإستعلامات والوصول لأفضل حل ...
    لكن على مااظن لو عملت 25 استعلام و 25 تحقق غير الاشياء الاساسية على سيرفر ممتاز ستظل الصفحه تخرج بسرعه






  9. #9
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    ومن قال انك ستعمل استعلام كل مرة
    شيء طبيعي ان يكون عندك نظام كاش
    ابسط ما فيها:
    اعمل استعلام يعمل لمرة واحدة عند تشغيل السكربت ويقوم بخزن جدول الصلاحيات في متغير
    لنفرض متغير الجلسة مثلا

    للاسف لا توجد طريقة سحرية لإخبار السكربت بأن المجموعة أ لا يمكن ان تضيف موضوع،
    ولو وجدت سأستعملها بكل سرور
    صحيح ان الطريقة صعبة ولكن هذا هو الفرق بين البرمجية القوية والضعيفة
    لكن للاسف الكثير من العملاء لا يقدرون ذلك

    اذا لم تصدقني انظر جدولusergroup في ال vb
    او شوف كود newreply.php في نفس السكربت وشوف البلاوي اللي فيه





    التعديل الأخير تم بواسطة ahmad sadiq ; 30-07-2010 الساعة 08:01 AM

  10. #10
    عضو فعال
    تاريخ التسجيل
    Dec 2008
    المشاركات
    1,897


    لو كان المشكل كما وصفت (استخراج المواضيع) لما احتجت لجدول كامل بل فقط حقل في نفس جدول المجموعات .
    الذي أقصده أوضحه لك في مثال تالي لدي التالي:
    قسم للمقالات ، قسم للمرئيات ، قسم للصوتيات
    جميع الأعضاء في حالتهم الافتراضية يستطيعون نشر المحتويات في هذه الأقسام الثلاثة .
    لكن في بعض المرات يخالفون قوانين قسم معين ، فلأردعهم عن فعل ذلك سأقوم بمنعهم من نشر المحتويات مع ترك خيار التعليق و المشاهدة و اذا كرر المخالفة امنعه من التعليق و اذا كرر احجب عنه القسم كاملاً.
    و لعل أبسط مثال من ذلك تعيين المشرفين ، فمثلا أعينه على قسم المرئيات ، و سيدخل على لوحة التحكم نفسها جميع المشرفين لكن التراخيص التي تظهر لمشرف المرئيات ليست نفسها التي تظهر لمشرف قسم الصوتيات و هكذا ..





    __________________
    راسلني

  11. #11
    عضو فعال
    تاريخ التسجيل
    Dec 2008
    المشاركات
    1,897


    أحمد أحس أنه هناك مربط يسهل الفكرة و يفك تعقيدها و تعبها .





    __________________
    راسلني

  12. #12
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    لماذا لا تجعل البرمجة عامة اكثر(generic)
    لا فرق بين قسم الصوتيات والمرئيات إلا بالاسماء
    هذه اقصى ما تعمله هو CRUD -create,read,update,delete
    ربما تقول انك لا تريد من مدير الصوتيات ان يضيف بقسم المرئيات
    هذا الامر طبيعي جدًا لأنه اصلا لن يتمكن من الوصول إلى ادارة قسم المرئيات لأن عضويته تفحص قبل الدخول
    إلى لوحة التحكم.



    بالتوفيق





    التعديل الأخير تم بواسطة ahmad sadiq ; 30-07-2010 الساعة 08:41 AM

  13. #13
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    هذا مقطع من لوحة تحكم الوردبرس التي استعملها حاليًا
    كود PHP:
    if ( 'post' == $post_type && !current_user_can('edit_posts') ) 
    لتوسيع الفكرة ممكن تعمل جدول لمنع الاعضاء من صلاحيات معينة

    شوف الانظمة الأخرى ربما تصل إلى حلول افضل، هذا اقصى ما اعرفه حاليًا
    وان شاء الله الأعضاء يفيدوك


    سلامات





    التعديل الأخير تم بواسطة ahmad sadiq ; 30-07-2010 الساعة 08:33 AM

  14. #14
    عضو فعال
    تاريخ التسجيل
    Dec 2008
    المشاركات
    1,897


    بارك الله فيك سأعتمد بعض الحلول النسبية حتى يجود علينا اخواننا في الله ببعض ما عندهم من الخبرة و التجربةّ.





    __________________
    راسلني

  15. #15
    عضو نشيط
    تاريخ التسجيل
    Oct 2008
    المشاركات
    283


    بما أن صلاحيات العضو متوقفة على أو مشتقة من:
    1- المجموعة التي ينتمي إليها ( إذا كان ينتمي الى "مجموعة الأعضاء" أخذ الصلاحيات المحددة لهذه المجموعة، وإذا كان من "مجموعة المدراء" أخذ الصلاحيات المحددة لهذه المجموعة، وهكذا.).
    2- الصلاحيات الخاصة بهذا المستخدم ( قد يكون من "مجموعة الأعضاء" وفي نفس الوقت له تراخيص خاصة عن باقي أعضاء المجموعة).

    إذن: فقط يكفينا أن أن نعدل في جدول المستخدمين وأبضاً جدول المجموعات.
    1- إنشاء عمود إضافي في جدول المجموعات (الخاص بصلاحيات المستخدمين الذين ينتمون لتلك المجموعة) حيث سيكون لكل مجموعة حقل خاص بالصلاحيات الخاصة بها.
    2- إنشاء عمود إضافي في جدول المستخدمين (الخاص بصلاحيات المستخدم الخاصة) حيث سيكون لكل عضو حقل خاص بالصلاحيات الخاصة به.

    - الخطوة التالية تحديد الصلاحيات:
    نفرض أننا لدينا مجموعة من الصلاحيات على هذا النحو:
    1- حالة المستخدم (موقوف/فعال)
    2- إمكانية أو عدم إمكانية الكتابة في قسم معين أو عدة أقسام.

    إذن سيكون لدينا مصفوفة تحمل تلك الصلاحيات:
    القيمة الأولى: تحتوي على رقم إما 0 أو 1 ( إذا كانت 0 فهذ يعني أن المستخدم موقوف، وإذا كانت 1 فهذا يعني أن هذا المستخدم فعال وبإمكانه مباشرة صلاحيته كمستخدم على الموقع).
    القيمة الثانية: ستحتوي على مصفوفة بها جميع معرفات (IDs) الأقسام التي لن يستطيع المستخدم الكتاية فيها).

    نفرض أن لدينا مستخدم له هذه الصلاحيات:
    1- فعال.
    2- لا يمكنه أن يكتب في أقسام ( المقالات، الإستشارات).
    وبفرض أن معرف ID قسم المقلات: 3 - والإستشارات: 12
    إذن ستكون مصفوفة صلاحيته على هذا النحو:
    كود PHP:
    <?php
    $arr 
    = array(1, array(312));
    ?>
    مارأيك أن نعمل لهذه المصفوفة implode وكذلك المصفوفة الداخلية لتكون مثلاً: 1*3-12
    حيث العلامة (*) ستفصل بين الصلاحيات وبعضها، أما العلامة (-) ستفصل بين IDs الأقسام المحظور على المستخدم الكتابة فيها.

    إذن ستكون هذه القيمة النصية ("1*3-12") موجودة في خانة الصلاحيات (في جدول المستخدمين ) لهذا المستخدم.

    نفس الموضوع سننفذه على خانة الصلاحيات في جدول المجموعات.
    لكن عليك أن تعطي الأولوية لصلاحيات المستخدم الخاصة عن صلاحيات المجموعة التي ينتمي إليها غذا كان هناك إختلاف.

    طبعاً بعد أن نستعلم عن صلاحية المستخدم والمجموعة التي ينتمي إليها... سنقوم بعمل explode لهذا النص لإرجاعه كمصفوفة لنستطيع التعامل مع القيم بعد تصفيفها لقراءة الصلاحيات ومن ثم إعطاء الترخيص المقابل له.
    ( يعني سنتأكد بدالة شرطية أن القيمة المخزنة في مفتاح المصفوفة الأول هي "1" - وإذا كانت "0" فإننا سنعطي رسالة لتلك المستخدم بأنه موقوف من قبل الإدارة وأن عضويته مجمدة حتى إشعار آخر.
    وبالنسبة لإمكانية الكتابة في الأقسام.. فإننا سنتأكد أن المستخدم الذي سيكتب المقال ليس لديه في مصفوفة المعرفات الخاصة بحظر الكتابة في نلك الأقسام أنها خالية من القسم الذي يود الكتابة فيه. وإن كان النعرف موجود فإننا سنخبره بأنه ليس بإمكانه الكتابة في تلك القسم.

    آسف للإطالة..
    واعذرني إذا كان في خطأ أو شيئ لم أتداركه... أخوك ترك البرمجة من 10 شهور، وفاضل شويه كمان وهنسى الاساسيات تماما

    تحياتي..





    __________________
    اللهم وفقني لما تحبه وترضاه...





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض