الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

اخفاء القوائم حسب صلاحيا ت المستخدمين

Featured Replies

بتاريخ:

اخوانى اقوم باشناء مشروع عن قاعدةبيانات وهناك العديد من المستخدمين وقد قمت فى الشاشه المرفقه بتزويد مستوى للمرور
اى بمعنى قد قسمت الصلاحيات الى مستويات
post-26405-1175638616_thumb.jpg
level 1 admin
level 2 dba, power user
level 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]

وهذه المنيو التى اتحدث عنها فى المشاركه السابقه للاسف نسيت ان اضعها فىالسابقه ولم اجد التعديل على المشاركه
كما كان بالماضى

post-26405-1175640446_thumb.jpg

تم تعديل بواسطة mdsalah

بتاريخ:

الأخ / 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

مع تمنياتى بالتوفيق

بتاريخ:
  • كاتب الموضوع

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

بتاريخ:

الأخ / mdsalah

الهدف من القائمة Menu عدم تعامل المستخدم مع الاختيارات من برامج النظام الا فى حدود صلاحياته ..
الاقتراح الاول : توزيع الصلاحيات على استخدام البرامج حسب مستوى صلاحية المستخدم اى حسب المستوى الوظيفى مثلا ( مدير - مدخل بيانات - مسؤول مبيعات - ... )
- يتم معرفة مستوى صلاحية المستخدم من شاشة الدخول ويمكن التعامل معها داخل برامج النظام من خلال حقل جلوبال global
- سيتم تكوين المنيو menu بكامل برامجها المستدعاه .. كما هو فى الطريقة التقليديه اثناء مرحلة تجهيز الmenu
- اضافة شرط قبل استدعاء اي برنامج داخل المنيو .. لمعرفة هل يوجد صلاحية للمستخدم ام لا وفى هذه الحالةيظهر لون المفتاح المختار فى القائمة بلون خافت اى لا يمكن الضغط على مفتاح استدعاء البرنامج المطلوب .

الاقتراح الثاني
- وجود جدول لبرامج النظام جميعها .
- وجود جدول لصلاحيات المستخدمين على البرامج .
- سيتم تعبئة المنيو بالبرامج المحددة فقط حسب صلاحية المستخدم من الجدول وذلك قبل استدعاء ال menu
فى برنامج الدخول الرئيسي

مع تمنياتى بالتوفيق

بتاريخ:
  • كاتب الموضوع

الاقتراح الاول : توزيع الصلاحيات على استخدام البرامج حسب مستوى صلاحية المستخدم اى حسب المستوى الوظيفى

اخى امجد كيف تتم هذه الصلاحيات التتى تحدثت عنها انه يوجد لدى جدول USER_VERFICATION
وبه اسم المستخدم والباسورد والمستوى
وهما اربعه مستويات وقد قمت بعمل lIST ITEMS فى الفورم وكتبت فيه كل هذة المستويات وانت رايت التريجر المكتوب وهو كل مستخدم ينادى الفورم الخاص به واعتقد انه خطاء كبير وخاصه اذا كان عددالمستخدمين لدى كبير
ADMIN - POWER USER - DATA VIEWER - DATA ENRTY
اريد بالتحديد ماذا افعل او كيف اقوم باعطاء الصلاحيات لهم
هل بانشاء جدول جديد للصلاحيات
او هناك تريجر معين اكتبه واين ساقوم بكتابتها لكى امنع هولاء المستخدمين من الدخول الىبيانات مستخدم اعلى فى الدرجه
ويوجد ايضا فى الشاشه الرئيسيه بعض BUTTON التى تنادى فورم اخرى من النظام فكيف امنعهم ايضا من اي يقوموا بتعديل عليها او رايتها من الاساس فاانا انشات فورم ريئسيه واحدة ومن المفترض ان مستوى هذا المستخدم هو ما يحدد ما سيظهر له سواء من BUTTON او منيو والعناصر التى بها فكيف يتم كل هذا واتمنى ان تشرحه لى بسلاسه لانى حديث العهد بالاوراكل كما ذكرت وهناك الكثير الذى افتقدة وارجو مساعدتكم
وشكرا على ردك المرات السابقه

تم تعديل بواسطة mdsalah

بتاريخ:

- يجب ان تكون هناك منيو واحدة فقط على مستوى النظام .
- داخل المنيو وامام كل عنصر سيتم كتابة امر استدعاء الفورم الخاصة بالاختيار المحدد
command_type = pl/sql
command_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);


السطر الاول : جعل مفتاح الاختيار بالقائمة غير مفعل
السطر الثاني : استدعاء البرنامج
السطر الثالث : ارجاع مفتاح الاختيار بالقائمة مفعل مرة اخرى
وسبب استخدام هذا : حتى لا يمكن للمستخدم استدعاء نفس البرنامج اكثر من مرة فى نفس الوقت

ارجوا ان يكون الامر اتضح ..

بتاريخ:
  • كاتب الموضوع

كلمات الشكر قليله ان توافيك حقك اخى امجد
وما شاء الله عليك وانا شاكر لك ولكل المنتدى

  • بعد 5 سنة...
بتاريخ:

مشششششششششششششششكور

  • بعد 8 شهور...
بتاريخ:

انا مستخدم جديد فمعلش عندي استفسار

لما اكتب الكود ده لابد من وجود جدول علي الداتا بيز يحتوي علي البيانات
اريد الحصول علي بيانات الجدول الاساسيه لتشغيل هذا الكود

وشكرا جدااااااااااااااااااااااااااااااااااااااااا

  • بعد 3 أسابيع...
بتاريخ:

مجهود رائع

  • بعد 4 سنة...
بتاريخ:

لو سمحت عملت شاشة لوجن ومنها لو اليوزر ادخل كلمة المرور واسم اليوزر صحيح يدخل على شاشة الmain.fmx ومنها نتنقل إلي باقي الشاشات المشكلة اني بعد الدخول مش بيدخل على شاشة الmain.fmx ويستمر في عمل التحميل للدخول دون الدخول للشاشة الرئيسية ؟؟؟!!! اية السبب

تم تعديل بواسطة خالد العجمي

بتاريخ:

تأكد من المسار (path) الذي كتبته للوصول إلى main.fmx

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.