المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : Security Module in Great Plains


humam
26-Dec-2011, 04:30 PM
Security Module in Great Plains

ان المستخدم يمتلك سماحية الوصول Access الى النماذج الرئيسية فقط ولكي يكون المستخدم قادر على اكمال مهام محددة يجب ان يتم ادراجه ضمن اكثر من دور (Role ) حتى يمتلك صلاحيات الوصول النماذج والتقارير المطلوبة وسوف تقع مسؤولية اعطاء هذه الصلاحيات على عاتق System Administrator.

بالنسبة الى عملية التعديل Customization التي تقوم بها على برنامج Great Plains سوف تحتاج الى اضافة مهام Tasks جديد تستخدم للسيطرة على عملية الوصول الى المصادر الجديدة new resources التي يتضمنها مشروعك ويمكن الذهاب الى ابعد من ذلك عن طريق تخصيص واضافة دور Role يخص المشروع ومن ثم تقوم بادراج هذه Tasks الجديدة ضمن هذا الدور. ولكن يجب ان لا يتضمن المشروع الذي تقوم به عملية ادراج لمستخدين معينين ضمن هذا الدور لان هذه المهمة يجب ان تتم بشكل يدوي من قبل System Administrator كما ذكرنا سابقا.

قد تجد انه من المناسب بدلا من تكوين new task تخص مشروعك ان تعمل على اضافة عملية Operation جديدة الى Task موجودة اصلا حيث كما نعلم ان GP10 يمتلك مجموعة من Predefined tasks يفضل هذا الخيار اذا كان المشروع الذي تقوم به يتضمن عملية توسيع على احد نماذج الجريت بلينز مثل اضافة نموذج لادخال معلومات اضافية عن Customer في هذه الحالة يمكنك ان تقوم بعملية تكوين Operation جديدة وثم ادراجها في CARD_0201 Task والتي تتخصص بعملية السيطرة على معلومات الزبائن الاساسية وهكذا مع باقي النماذج الاخرى.

بالنسبة الى نافذة Alternate/Modified Forms and Reports سوف نستخدمها لاعطاء سماحية الوصول الى نماذج الجريت بلينز التي قمت بعملية تعديل عليها عن طريق اضافة اوتعديل الحقول الموجودة فيها حيث ان التصرف الطبيعي لبرنامج الجريت بلينز لا يضمن اعطاء سماحيات الوصول الى النماذج المعدلة لذا يجب ان يقوم System Administrator بهذه المهمة.

Monzer Osama
26-Dec-2011, 04:33 PM
حياك الله أخي همام ...
ماشاء الله دائما سباق بالخير ....
كنت بدأت في هذه السلسلة من قبل http://www.gp4arab.com/forum/showthread.php?t=733

وجاري إكمالها لكنك سبقتني ... الله يعطيك العافية :)

humam
26-Dec-2011, 04:34 PM
Adding Security Data

ان افضل طريقة للقيام بهذه العملية وبشكل برمجي هو استخدام Dexterity Triggers حيث يمكن ان نسجل Trigger يتم تنفيذه بعد عملية الولوج الناجح من قبل System Admin الى برنامج الجريت بلينز حيث هناك procedure يسمى Add_Successful_Login_Record يتم تنفيذه بعد عملية login لذا يمكن ان ننفذ الشفرة البرمجية ISYS_CreateSecurityData التي سوف تعمل على اضافة Security Operation و Security Tasks و Security Roles الخاصة بالمشروع الذي تطوره كما هو واضح في الشفرة التالية

local integer l_result;
l_result = Trigger_RegisterProcedure(script Add_Successful_Login_Record,
TRIGGER_AFTER_ORIGINAL, script ISYS_CreateSecurityData);
if l_result <> SY_NOERR then
warning "Procedure trigger for adding security data failed.";
end if;
Security Tasks

ان المهام الامنية security task هي عبارة عن مجموعة من العمليات operations التي يستطيع المستخدم القيام بها في برنامج الجريت بلينز.
ان برنامج الجريت بلينز سوف يحتوي على مجموعة من المهام المعرفة مسبقا وهناك مهمة خاصة special task يطلق عليها DEFAULTUSER سوف تحتوي على كل العمليات Operations التي يمكن للمستخدم القيام بها في برنامج الجريت بلينز فأذا كنت تمتلك مصادر resources ضمن Integration Project الذي تعمل عليه و كانت من مطلبات Client ان يكون جميع المستخدمين لهم القابلية على استخدام هذه المصادر يفضل ان تضيف Operations الخاصة بشروعك الى هذه Task .

humam
26-Dec-2011, 04:39 PM
حياك الله أخي همام ...
ماشاء الله دائما سباق بالخير ....
كنت بدأت في هذه السلسلة من قبل http://www.gp4arab.com/forum/showthread.php?t=733

وجاري إكمالها لكنك سبقتني ... الله يعطيك العافية :)

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

عماد زيد
27-Dec-2011, 05:21 AM
الله يعطيكم العافية يا شباب
شكراً همام و منذر

أحمد الغامدي
27-Dec-2011, 09:41 AM
مشكور مشرفنا المبدع همام
وقفة إجلال وإكبار لإخواننا العراقيين مع دعواتنا الصادقة بأن يحفظهم المولى ويفرج كروبهم وينصرهم على أعداهم

humam
27-Dec-2011, 12:08 PM
الله يعطيكم العافية يا شباب
شكراً همام و منذر

الله يسلمك عماد برسم الخدمة وانشاء الله ينال هذا الموضوع استحسانكم

humam
27-Dec-2011, 12:12 PM
مشكور مشرفنا المبدع همام
وقفة إجلال وإكبار لإخواننا العراقيين مع دعواتنا الصادقة بأن يحفظهم المولى ويفرج كروبهم وينصرهم على أعداهم

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

hunter0003
28-Dec-2011, 05:00 PM
اخى همام فعلا كلامك كلة مظبوط وانا مجربة كل ما ذكرت بارك الله فيك للنشر

humam
28-Dec-2011, 05:28 PM
اخى همام فعلا كلامك كلة مظبوط وانا مجربة كل ما ذكرت بارك الله فيك للنشر

مشكور اخي واذا كان عندك ملاحظات تود ان تطرحها في هذا الموضوع سوف اكون شاكرا لك وذلك للمساهمة في اثراء الموضوع.

humam
28-Dec-2011, 05:30 PM
Security Task Elements

ان كل Task سوف تمتلك العناصر التالية:

Task ID: وهو عبارة عن معرف فريد لكل task وهنا يفضل عند اعطاء قيم لهذا المعرف الالتزام بالصيغة المستخدمة في المايكروسوفت جريت بلينز وهي كما يلي:
Type_Module_Sequence
حيث ان Type سوف يشير الى نوع هذه task ويمكن ان يأخذ احدى القيم التالية :
ADMIN, CARD, INQ, RPT, or TRX
اما Module فهو يشير الى الموديول الذي نعرف المهمة task له مثل Sales واخيرا sequence وهو عبارة عن قيمة رقمية للتمييز بين Task المتشابهة.

Task Name: وهو الاسم الذي سوف يستخدم للاشارة الى هذه Task ويجب ان يكون الاسم وصفي اي يعطي معلومات عن طبيعة task.

Task Description: ويستخدم لاعطاء تفاصيل اكثر عن طبيعة task.

Category: ويستخدم لتجميع grouping للمهام المرتبطة مع بعضها البعض.

humam
28-Dec-2011, 05:33 PM
Creating Security Task Programmatically:

يمكن القيام بذلك عن طريق استخدام الدالة CreateSecurityTask() والتي تمتلك الصيغة التالية :

CreateSecurityTask (task_ID, task_name, description, category)

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

CATEGORY_COMPANY : Company
CATEGORY_FINANCIAL: Financial
CATEGORY_INVENTORY: Inventory
CATEGORY_OTHER: Other
CATEGORY_PAYROLL: Payroll
CATEGORY_PROJECT: Project
CATEGORY_PURCHASING: Purchasing
CATEGORY_SALES: Sales
CATEGORY_SYSTEM: System


القيمة المعادة من هذه الدالة تكون عبارة عن قيمة صحيحة ممثلة بأحد الثابتين :

OKAY: The security task was added successfully.
DUPLICATE: The security task already exists.

humam
28-Dec-2011, 05:36 PM
مثال:
في هذا المثال سوف نوضح كيفية استخدام الدالة السابقة لاضافة مهمة Task جديدة:

Local string TaskID;
Local string TaskName;
Local string TaskDescription;
Local long Status;

TaskID=”CARD_PJI_01”;
TaskName=” Maintain PJI”;
TaskDescription=” Maintain PJI security”;

Status= CreateSecurityTask (TaskID, TaskName, TaskDescription, CATEGORY_SALES of form of form sySecurityRoleEntry) of form sySecurityTask;


ويمكن تحسين هذه الشفرة عن طريق التأكد اولا من ان المهمة “CARD_PJI_01” غير موجودة وذلك عن طريق استخدام الدالة Exists() والتي تعمل على التأكد من ان المهمة الممررة لها موجودة او غير موجودة في الجريت بلينز حيث انها تأخذ معامل واحد هو TaskID والقيمة المعادة سوف تكون من النوع Boolean وتكون True اذا كانت المهمة موجودة اصلا وFalse اذا كانت المهمة غير موجودة.

Local string TaskName;
Local string TaskDescription;
Local long Status;
TaskID=”CARD_PJI_01”;
TaskName=” Maintain PJI”;
TaskDescription=” Maintain PJI security”;
if Exists (TaskID) of form sySecurityTask = false then
Status= CreateSecurityTask (TaskID, TaskName, TaskDescription, CATEGORY_SALES of form of form sySecurityRoleEntry) of form sySecurityTask;
end if;

humam
28-Dec-2011, 05:38 PM
Security Task Operations

ان Operation هي نوع خاص من مصادر الجريت بلينز والتي من خلالها سوف نسطير على سماحيات الوصول.

Security Task Operations Elements

ان كل Task من الممكن ان تحتوي على العديد من Operations والتي سوف تمثل المصادر resources التي نقوم بعملية اعطاء الصلاحية لها وان كل Operation سوف تحتوي على العناصر التالية:

Task ID: وهو يمثل Task ID للمهمة Task التي تقوم بعملية اضافة Operation لها وهنا يمكنك ان تضيف Operation الى task جديدة خاصة بك او الى task موجودة مسبقا في برنامج الجريت بلينز.

Product ID : وهو سوف يمثل المعرف الفريد لل Integration Dictionary ويمكن ان يكون عبارة عن ثابت او رقم صحيح وقد تطرقت الى Product ID بنوع من التفصيل في موضوع تصميم القوائم في الجريت بلينز.

Resource Type : وهو يمثل نوع المصدر او resource الذي نقوم باضافة Operation من اجله ويمكن ان يكون احد الانواع التالية

TABLETYPE :1
FORMTYPE :2
REPORTTYPE : 23
SECURITYTYPE_LISTS : 900


Security ID: وهو يمثل معرف المصدر او resource id الخاص بالمصدر المحدد specified resource الذي نقوم بأضافة Operation له للمزيد من المعلومات عن GP resources يمكن مراجعة الموضوع تعلم الدكسترتي. طبعا سوف نستخدم الدالة resourceid لاسترجاع هذه القيمة وتوجد هناك حالة خاصة وهي عندما يكون Recourse Type من نوع List في هذه الحالة سوف تحتاج الى استخدام الدالة BuildDictSpecificID() لبناء هذا المعرف.

humam
28-Dec-2011, 05:42 PM
Creating Security Operations Programmatically:

للقيام بذلك سوف نستخدم الدالة AddSecurityTaskOperation() التي تعود للنموذج sySecurityTaskOperations للقيام بعملية اضافة Operation الى Task بشكل برمجي تمتلك هذه الدالة الصيغة التالية :

AddSecurityTaskOperation (task_ID, dict_ID, security_restype, security_ID)

وعناصر هذه الدالة واضحة وهي متوافقة مع عناصر Operation المشروحة سابقا وسوف تعيد هذه الدالة قيمة صحيحة وكما يلي:

OKAY: The security task was added successfully.
DUPLICATE: The security task already exists.

مثال:
في هذا المثال سوف نوضح كيفية استخدام الدالة السابقة لاضافة عملية Operation جديدة:

local long status;
local string taskID;
TaskID = "CARD_PJI_01";

Status = AddSecurityTaskOperation (TaskID,
ISYS_ID,
FORMTYPE,
resourceid (form PJI_Test_Maintenance))
of form sySecurityTaskOperations;

Status = AddSecurityTaskOperation (TaskID,
IG_PROD_ID,
REPORTTYPE,
resourceid (report PJI_Test))
of form sySecurityTaskOperations;

Status = AddSecurityTaskOperation (TaskID,
IG_PROD_ID,
TABLETYPE,
resourceid(table PJI_Test_MSTR))
of form sySecurityTaskOperations;

humam
28-Dec-2011, 05:43 PM
يمكن تعديل الشفرة السابقة عن طريق التحقق من ان Operation التي نحن بصدد اضافتها الى Task غير موجودة مسبقا ويمكن القيام بذلك عن طريق استخدام الدالة Exists() التابعة للنموذج sySecurityTaskOperations وهي تختلف عن الدالة Exists التي استخدمناها سابقا من حيث نوع وعدد البرامتر:
Exists (task_ID, dict_ID, security_ID, security_restype)
القيمة المعادة من هذه الدالة هي قيمة منطقية وتكون True في حالة كون العملية موجودة مسبقا وتعيد False في حالة عدم وجود هذه Operation مسبقا.

local long status;
local string taskID;
TaskID = "CARD_PJI_01";
if Exists(TaskID,ISYS_ID,FORMTYPE,resourceid (form PJI_Test_Maintenance)) of form sySecurityTaskOperations = false then

Status = AddSecurityTaskOperation (TaskID,
ISYS_ID,
FORMTYPE,
resourceid (form PJI_Test_Maintenance))
of form sySecurityTaskOperations;

end if;

عثمان
29-Dec-2011, 08:03 AM
السلام عليكم ورحمة الله وبركاته

انا من المتابعين لدروسك استاذ همام بشغف واحاول ان اتعلم بقدر ما استطيع لكن لي سؤال أرجو أن لا يكون غبي :rolleyes:
Creating Security Task Programmatically:

يمكن القيام بذلك عن طريق استخدام الدالة CreateSecurityTask() والتي تمتلك الصيغة التالية :

CreateSecurityTask (task_ID, task_name, description, category)

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

لماذا هذه الأكواد (التي تنفذ من الديكستيريتي ) أقصد ما الفائدة منها طالما أنه باستطاعتنا أن نقوم بعمل Task ,Roll من خلال جريت بلينز 10 مباشرة ؟!

humam
29-Dec-2011, 01:24 PM
السلام عليكم ورحمة الله وبركاته

انا من المتابعين لدروسك استاذ همام بشغف واحاول ان اتعلم بقدر ما استطيع لكن لي سؤال أرجو أن لا يكون غبي :rolleyes:


لماذا هذه الأكواد (التي تنفذ من الديكستيريتي ) أقصد ما الفائدة منها طالما أنه باستطاعتنا أن نقوم بعمل Task ,Roll من خلال جريت بلينز 10 مباشرة ؟!

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

humam
30-Dec-2011, 06:31 PM
Security Role

ان مستخدم الجريت بلينز يمكن ان يمتلك عضوية ضمن اكثر من دور Role واحد وان Role يحتوي على مجموعة من Security Operation والتي تعطى او تحجب عنها سماحيات الوصول للمستخدمين الاعضاء ضمن هذا الدور.

ان Security Role سوف يتكون من العناصر التالية:

Role ID: وهو عبارة عن معرف فريد ويجب ان تكون حالة الاحرف المستخدمة هنا هي Uppercase.
Role Name: وهو اسم هذا الدور ويفضل ان يكون الاسم وصفي اي يشير الى مهام هذا الدور.
Role Description: وهنا نضع التفاصيل المتعلقة بهذا الدور.

humam
30-Dec-2011, 06:33 PM
Creating Security Role Programmatically

لتكوين الادوار بشكل برمجي سوف نستخدم الدالة CreateSecurityRole() والتي تعود للنموذج sySecurityRole والتي تمتلك الصيغة التالية :

CreateSecurityRole(role_ID, role_name, description)

وان برامترات هذه الدالة واضحة وهي متوافقة مع عناصر Role وسوف تعيد هذه الدالة بعد التنفيذ قيمة صحيحة يمكن التعبير عنها بالثوابت التالية:

OKAY: The security task was added successfully.
DUPLICATE: The security task already exists.

وهنا كما لاحظنا في حالة Task و Operation يمكن التأكد من ان Role الذي نحن بصدد اضافته موجود مسبقا او لا عن طريق الدالة Exists التي تعود للنموذج sySecurityRole وتأخذ هذه الدالة معامل واحد هو Role ID وتعيد قيمة منطقية true اذا كان هذا Role موجود و false اذا لم يكن موجود مسبقا:

local long status;
local string roleID;
roleID = "ISYS TEST";
if Exists(roleID) of form sySecurityRole = false then
status = CreateSecurityRole(roleID, "Isys Test", "Test creating Security Role.") of form sySecurityRole;
end if;

humam
30-Dec-2011, 06:35 PM
Adding tasks to security roles

يمكن اضافة المهام Task الى Role بشكل برمجي عن طريق استخدام الدالة AddTaskToRole() التابعة للنموذج sySecurityTaskRole وهذه الدالة تمتلك معاملين فقط هما معرف Role ومعرف Task والصيغة النحوية لها هي :
AddTaskToRole (role_ID, task_ID)

وسوف تعيد هذه الدالة بعد التنفيذ قيمة صحيحة يمكن التعبير عنها بالثوابت التالية:

OKAY: The security task was added successfully.
DUPLICATE: The security task already exists.

وهنا ايضا يمكن التأكد من عدم ادراج Task التي نحن بصدد اضافتها الى هذا الدور مسبقا عن طريق استخدام الدالة Exists التي تعود للنموذج sySecurityRole وتأخذ هذه الدالة معاملين هما معرف Role ومعرف Task وتعيد قيمة منطقية true اذا كان هذا Task موجودة مسبقا ضمن Role و false اذا لم يكن موجودة مسبقا.

local long status;
local string taskID;
local string roleID;
taskID = " CARD_PJI_01";
roleID = " ISYS TEST ";
if Exists(roleID, taskID) of form sySecurityTaskRole = false then

status = AddTaskToRole(roleID,taskID) of form sySecurityTaskRole;

end if;