السلام عليكم ورحمة الله وبركاته بعد ماكثرت الاسئلة حول كيفية استخدام الصلاحيات على الفورم وبما أنني عضو من أعضاء هذا المنتدى المتميز سأقوم بعرض طريقة أنا أستخدمها شخصيا ومن صنعي أنا وزميل لي أثناء الدراسة حيث قمنا بإنشاء FUNCTION للتاكد من صلاحية اي مستخدم يقوم بعمل الدخول على النظام وعلى اساس الصلاحية الممنوحة له تقوم باخفاء العناصر الخاصه بهذه الصلاحية. أولا: (الوظائف والامتيازات التالية تعتبر قياسية يمكنك التعديل عليها) نقوم بإنشاء وظائف مثلا:
create role admin;
create role data_entry;
create role viewr;
ثانيا: نمنح الوظائف الامتيازات التالية:
grant connect,resource,dba to admin;
grant select any table,update any table,delete any table,insert any table
to admin;
grant select any sequence, alter any sequence
to admin;
grant connect,resource to data_entry;
grant select any table,update any table,delete any table,insert any table
to data_entry;
grant select any sequence, alter any sequence
to data_entry;
grant connect,resource to viewr;
grant select any table
to viewr;
grant select any sequence
to viewr;
ثالثا: نقوم بمنح الوظائف السابقة الاستعلام من جدول الوظائف الموجود بالأوراكل: *مستخدمي ORACLE 8,8i قم بالدخول باسم المستخدم التالي (internal/oracle) وعمل التالي:
grant select
on dba_role_privs
to admin;
grant select
on dba_role_privs
to data_entry;
grant select
on dba_role_privs
to viewr;
*مستخدمي ORACLE9i قم بالدخول باسم المستخدم التالي (sys/sys as sysdba) تأكد من كلمة المرور حسب ماقمت بتعديله. رابعا: نقوم الآن بإنشاء المستخدمين ومنح كل حسب وظيفته:
grant admin to user1 identified by u123;
grant data_entry to user2 identified by u123;
grant viewr to user3 identified by u123;
الآن تم إنشاء الوظائف ومنحها الامتيازات ومنح الامتيازات للمستخدمين, بقي الآن دور FUNCTION التي سوف توضع في الفورم أولا: قم بفتح النموذج المراد وضع الوظائف عليه ثانيا: قم بالذهاب الى Program Units واضغط على زر create إختر Function وقم بتسميتها بـ USER_ROLE ثم قم بلصق الكود التالي:
FUNCTION USER_ROLE(ROLEE VARCHAR2,USERS VARCHAR2) RETURN BOOLEAN
IS
CURSOR V_ROLES IS SELECT GRANTED_ROLE
FROM DBA_ROLE_PRIVS WHERE GRANTEE=UPPER(USERS);
ROLES_RECORD VARCHAR2(100);
BEGIN OPEN V_ROLES;
LOOP
FETCH V_ROLES INTO ROLES_RECORD; EXIT WHEN V_ROLES%NOTFOUND;
IF ROLES_RECORD=ROLEE THEN RETURN(TRUE);
END IF;
END LOOP;
RETURN(FALSE);
END;
يتم في هذه الدالة استعلام عن الوظيفة الممنوحة حسب اسم المستخدم والرجوع بها ثالثا: في نفس النموذج قم بعمل Trigger من نوع WHEN-NEW-FORM-INSTANCE ووضع الاشياء التي تريد اخفاءها على حسب اسم الوظيفة كما في المثال التالي:
IF USER_ROLE('data_entry',USER) THEN
Set_item_Property('CONTROL.USER_MANAGMENT', ENABLED, PROPERTY_FALSE);
END IF;
عند وضع تحقق لوظيفة أخرى قم بالتعديل على اسم الوظيفة والعناصر فقط بعمل ELSE IF أو IF بهذا نكون أنشأنا نظام صلاحيات (مايخرش الميه) أتمنى من الجميع أن يستفيدوا من هذه الطريقة التي ربما كون جديدة لكنها من تأليفي أنا وزميل لي أثناء فترة الدراسة والله يشهد. ترقبوا مني في الايام القادمة بإذن الله كتابة جميع أكواد إدارة المستخدمين برمجيا من دون الرجوع للـ SQL. <marquee direction=right>(أرجو من كل من يقرأ هذا الموضوع الدعاء لي بالتوفيق في الدنيا والآخرة)</marquee>