بتاريخ: 3 أبريل 200718 سنة comment_95948 اخوانى اقوم باشناء مشروع عن قاعدةبيانات وهناك العديد من المستخدمين وقد قمت فى الشاشه المرفقه بتزويد مستوى للمروراى بمعنى قد قسمت الصلاحيات الى مستويات level 1 admin level 2 dba, power userlevel 3 data entry level 4 data viewerوقمت بانشاء جدول للمستخدمين و المفتاح الاساسى له هما ( username-password-user_level)وقمت بوضع تريجر يقوم بعمل تشك على الاسم الباسورد والمستوى للمستخدم declare u varchar2(15); p varchar2(15); l number(2); x number;begin select user_id,user_pass,user_level into u,p,l from user_admin where user_id = :user_nm and user_pass = :password and user_level = :level; if l in(1) then /*open_form('d:\project\forms\main_form.fmx',activate,no_session,no_share_library_data);*/ call_form('d:\project\forms\main_form_1.fmx',no_hide,do_replace,query_only); elsif l in(2) then call_form('d:\project\forms\main_form_2.fmx',no_hide,do_replace,query_only); elsif l in(4) then call_form('d:\project\forms\main_form_4.fmx',no_hide,do_replace,query_only); end if; exception when no_data_found then x :=show_alert('a1'); raise form_trigger_failure; end;ولكن هذا الحل الوحيد الذى وجدتهوهو اننى قمت بعمل 3 منيو لكل مستوى منيو خاص به ولكن انا اريد عندما يقوم بعمل تاكيد على الاسم والباس والمستوى ان يخفى المنيو الخاصه بالمستخدم الاعلى منه فى المستوى وتكون هى منيو واحدة اى ان هناك منيو خاصه بالادمن العام وهى تتيح له كافه النظام ولكن اريد عندما ان يتم الاتصال بمستخدم فى مستوى data viewer مثلا ان يخفى بعض القوايم مثل الحسابات فلا يحق له الاطلاع عليها وقد بحثت فى الهلب الخاص بالفورم بلدر ولم اجد مثل هذه الخاصيه او لم استطع ان اعثر عليها ووجدت خواص اخرى مثل no hide - no replace set_form_propertyوالكثير فارجو منكم مساعدتى او اعطائى ارائكم فيما فعلت وهل هو حل ام انه حل مبدئى وشكرا جزيلا لكم [/font] [/size] [/color] [/b]وهذه المنيو التى اتحدث عنها فى المشاركه السابقه للاسف نسيت ان اضعها فىالسابقه ولم اجد التعديل على المشاركه كما كان بالماضى تم تعديل 8 أبريل 200718 سنة بواسطة mdsalah تقديم بلاغ
بتاريخ: 4 أبريل 200718 سنة comment_95954 الأخ / mdsalahبداية : لايفضل تكرار نفس البرنامج .. ثم التعديل فى كل نسخه حسب مستوى الصلاحية .. فهذا يتطلب عند اضافة برنامج جديد على سبيل المثال اضافته فى 3 أو 4 قوائم Menu >>> أي سيؤدى الى صعوبة صيانة برامج النظام .للتحكم فى اظهار العناصر داخل القوائم .. يمكن الحل بهذا الاسلوب :اظهار العناصر فى جميع القوائم ... وفى حالة عدم وجود صلاحية للمستخدم على عنصر معين يظهر العنصر بلون خافت غير مسموح بالضغط عليه enabled = falseوهذا يتطلب- من شاشة الدخول على النظام وكتابة كلمة سر صحيحة يتم تحريك مستوى الصلاحية الخاص بالمستخدم ... فى حقل global variable وليكن global.user_level- داخل برنامج الmenu ومع كل عنصر من عناصر القوائم وقبل الاختيار يكون هناك تأكد من مستوى صلاحيته لاستخدام هذا العنصر كما فى المثال DECLARE MI_ID MENUITEM; BEGIN MI_ID :=FIND_MENU_ITEM('ACTIVITIES_MENU.VACTION'); IF NAME_IN('GLOBAL.user_level') not in ('1','2') THEN SET_MENU_ITEM_PROPERTY(MI_ID,ENABLED,PROPERTY_FALSE); ELSE SET_MENU_ITEM_PROPERTY(MI_ID,ENABLED,PROPERTY_FALSE); CALL_FORM('VACTION',NO_HIDE); SET_MENU_ITEM_PROPERTY(MI_ID,ENABLED,PROPERTY_TRUE); END IF; END; توجد طريقة اخرى .. تعتمد على تحريك اسماء البرامج قبل استدعاء الmenuوطبقا لمستوى الصلاحية يتم تعبئة عناصر ال Menuمع تمنياتى بالتوفيق تقديم بلاغ
بتاريخ: 8 أبريل 200718 سنة كاتب الموضوع comment_96522 اخى امجد هل ممكن ان تشرح لى بالتفصيل اكثر لاننى لم استوعب الفكرة بوضوح وارجو بترقيم الخطوات وشكر على ردك.وجزاك الله خيرا تقديم بلاغ
بتاريخ: 9 أبريل 200718 سنة comment_96526 الأخ / mdsalahالهدف من القائمة Menu عدم تعامل المستخدم مع الاختيارات من برامج النظام الا فى حدود صلاحياته ..الاقتراح الاول : توزيع الصلاحيات على استخدام البرامج حسب مستوى صلاحية المستخدم اى حسب المستوى الوظيفى مثلا ( مدير - مدخل بيانات - مسؤول مبيعات - ... ) - يتم معرفة مستوى صلاحية المستخدم من شاشة الدخول ويمكن التعامل معها داخل برامج النظام من خلال حقل جلوبال global- سيتم تكوين المنيو menu بكامل برامجها المستدعاه .. كما هو فى الطريقة التقليديه اثناء مرحلة تجهيز الmenu- اضافة شرط قبل استدعاء اي برنامج داخل المنيو .. لمعرفة هل يوجد صلاحية للمستخدم ام لا وفى هذه الحالةيظهر لون المفتاح المختار فى القائمة بلون خافت اى لا يمكن الضغط على مفتاح استدعاء البرنامج المطلوب .الاقتراح الثاني - وجود جدول لبرامج النظام جميعها .- وجود جدول لصلاحيات المستخدمين على البرامج .- سيتم تعبئة المنيو بالبرامج المحددة فقط حسب صلاحية المستخدم من الجدول وذلك قبل استدعاء ال menu فى برنامج الدخول الرئيسي مع تمنياتى بالتوفيق تقديم بلاغ
بتاريخ: 9 أبريل 200718 سنة كاتب الموضوع comment_96528 الاقتراح الاول : توزيع الصلاحيات على استخدام البرامج حسب مستوى صلاحية المستخدم اى حسب المستوى الوظيفى اخى امجد كيف تتم هذه الصلاحيات التتى تحدثت عنها انه يوجد لدى جدول USER_VERFICATIONوبه اسم المستخدم والباسورد والمستوى وهما اربعه مستويات وقد قمت بعمل lIST ITEMS فى الفورم وكتبت فيه كل هذة المستويات وانت رايت التريجر المكتوب وهو كل مستخدم ينادى الفورم الخاص به واعتقد انه خطاء كبير وخاصه اذا كان عددالمستخدمين لدى كبير ADMIN - POWER USER - DATA VIEWER - DATA ENRTYاريد بالتحديد ماذا افعل او كيف اقوم باعطاء الصلاحيات لهم هل بانشاء جدول جديد للصلاحيات او هناك تريجر معين اكتبه واين ساقوم بكتابتها لكى امنع هولاء المستخدمين من الدخول الىبيانات مستخدم اعلى فى الدرجه ويوجد ايضا فى الشاشه الرئيسيه بعض BUTTON التى تنادى فورم اخرى من النظام فكيف امنعهم ايضا من اي يقوموا بتعديل عليها او رايتها من الاساس فاانا انشات فورم ريئسيه واحدة ومن المفترض ان مستوى هذا المستخدم هو ما يحدد ما سيظهر له سواء من BUTTON او منيو والعناصر التى بها فكيف يتم كل هذا واتمنى ان تشرحه لى بسلاسه لانى حديث العهد بالاوراكل كما ذكرت وهناك الكثير الذى افتقدة وارجو مساعدتكم وشكرا على ردك المرات السابقه تم تعديل 9 أبريل 200718 سنة بواسطة mdsalah تقديم بلاغ
بتاريخ: 9 أبريل 200718 سنة comment_96537 - يجب ان تكون هناك منيو واحدة فقط على مستوى النظام .- داخل المنيو وامام كل عنصر سيتم كتابة امر استدعاء الفورم الخاصة بالاختيار المحدد command_type = pl/sqlcommand_text = امر استدعاء البرنامج CALL_FORM('form_one',NO_HIDE); حتى الان هو الاسلوب المباشر فى استدعاء البرامج سيتم تطوير هذا الامر الاخير .. اى قبل استدعاء البرنامج سيتم السؤال عن مستوى صلاحية المستخدم مسبقا سيتم تجهيز معلومية قيمة مستوى الصلاحية اثناء دخول المستخدم على النظام .. وسيتم الاحتفاظ بها فى حقل جلوبال global وليكن اسمه 'GLOBAL.user_level'...سيتم تطوير امر استدعاء الفورملتصبح كما فى المثال فى مشاركاتى السابقة DECLARE MI_ID MENUITEM; BEGIN MI_ID :=FIND_MENU_ITEM('ACTIVITIES_MENU.VACTION'); IF NAME_IN('GLOBAL.user_level') not in ('1','2') THEN SET_MENU_ITEM_PROPERTY(MI_ID,ENABLED,PROPERTY_FALSE); ELSE SET_MENU_ITEM_PROPERTY(MI_ID,ENABLED,PROPERTY_FALSE); CALL_FORM('VACTION',NO_HIDE); SET_MENU_ITEM_PROPERTY(MI_ID,ENABLED,PROPERTY_TRUE); END IF; END; حيث ان 'ACTIVITIES_MENU هو اسم القائمة الفرعية فى المنيوان VACTION هو اسم العنصر التابع للقائمة الفرعية فى المنيوثم بناء على قيمة مستوى الصلاحية الموجود فى حقل الجلوبال سيتم وضع الشرط IF NAME_IN('GLOBAL.user_level') not in ('1','2') THEN اي اذا كان مستوى صلاحية المستخدم -- ليس ...مدير عام أو مدير ادارة على سبيل المثال .. فلن يتم استدعاء الفورموستتحول لون العنصر فى القائمة الى لون خافت اي غير مفعل SET_MENU_ITEM_PROPERTY(MI_ID,ENABLED,PROPERTY_FALSE); وفى حالة وجود صلاحية للتعامل مع هذا البرنامج سيتم استخدام الاوامر SET_MENU_ITEM_PROPERTY(MI_ID,ENABLED,PROPERTY_FALSE); CALL_FORM('VACTION',NO_HIDE); SET_MENU_ITEM_PROPERTY(MI_ID,ENABLED,PROPERTY_TRUE); السطر الاول : جعل مفتاح الاختيار بالقائمة غير مفعلالسطر الثاني : استدعاء البرنامج السطر الثالث : ارجاع مفتاح الاختيار بالقائمة مفعل مرة اخرىوسبب استخدام هذا : حتى لا يمكن للمستخدم استدعاء نفس البرنامج اكثر من مرة فى نفس الوقت ارجوا ان يكون الامر اتضح .. تقديم بلاغ
بتاريخ: 9 أبريل 200718 سنة كاتب الموضوع comment_96586 كلمات الشكر قليله ان توافيك حقك اخى امجد وما شاء الله عليك وانا شاكر لك ولكل المنتدى تقديم بلاغ
بتاريخ: 15 يناير 201313 سنة comment_231180 انا مستخدم جديد فمعلش عندي استفسارلما اكتب الكود ده لابد من وجود جدول علي الداتا بيز يحتوي علي البياناتاريد الحصول علي بيانات الجدول الاساسيه لتشغيل هذا الكودوشكرا جدااااااااااااااااااااااااااااااااااااااااا تقديم بلاغ
بتاريخ: 14 فبراير 20179 سنة comment_283019 لو سمحت عملت شاشة لوجن ومنها لو اليوزر ادخل كلمة المرور واسم اليوزر صحيح يدخل على شاشة الmain.fmx ومنها نتنقل إلي باقي الشاشات المشكلة اني بعد الدخول مش بيدخل على شاشة الmain.fmx ويستمر في عمل التحميل للدخول دون الدخول للشاشة الرئيسية ؟؟؟!!! اية السبب تم تعديل 14 فبراير 20179 سنة بواسطة خالد العجمي تقديم بلاغ
بتاريخ: 14 فبراير 20179 سنة comment_283026 تأكد من المسار (path) الذي كتبته للوصول إلى main.fmx تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.