مطالب آموزشی مرتبط با محصولات شرکت اوراکل

oracle adf, oracle soa, oracle bpm, oracle database, oracle weblogic

نحوه فعال سازی ADF Security

در این مقاله در چند گام ساده نحوه فعال سازی ADF Security در برنامه‌های تحت وب ADF را تشریح می‌نمایم. مثال استفاده شده برای این مقاله به این شرح می‌باشد که یک task flow ساده که شامل یک صفحه می‌باشد را ایجاد نموده و پس از آن یک role به نام myRole در ADF Security ایجاد نموده و task flow را برای افرادی که این role را دارند مجاز می‌نماییم. سپس یک کاربر به نام usr برای ورود ایجاد می‌نماییم و به آن مجوز myRole را اختصاص می‌دهیم تا بتواند task flow را اجرا نماید.

شرح
۱. ابتدا پروژه را ایجاد و task flow با نام secureTF ایجاد می‌نماییم. دقت فرمایید که این task flow از نوع bounded task flow می‌باشد. سپس یک صفحه نیز با نام main ایجاد می‌نماییم و درون secureTF قرار می‌دهیم.

۲. حال نوبت آن شده تا ADF Security را فعال نماییم. برای این منظور همانند تصویر زیر از application menu گزینه Secure منوی Configure ADF Security را کلیک نمایید تا ویزارد مخصوص برای فعال‌سازی ADF Security اجرا گردد

ویزارد فعال سازی ADF Security

۳. در مرحله اول گزینه پیش فرض آن را بدون تغییر باقی گذاشته و دکمه Next را میزنیم. در مرحله بعد برنامه تحت وبی را که می‌خواهیم برای آن ورود و خروج قرار دهیم را باید انتخاب نموده و پس از آن نوع مکانیسم اعتبارسنجی مورد استفاده را مشخص نماییم. در نوع اعتبارسنجی همانند تصویر زیر گزینه Form-Based Authentication را انتخاب می‌نماییم و گزینه Generate Default Pages را در حالت انتخاب قرار می‌دهیم. این گزینه باعث می‌شود تا فرم ورود و فرم خطا در ورود پیش فرض به صورت خودکار ساخته شود. سپس دکمه Next را کلیک می‌نماییم.

۴. این مرحله این امکان را می‌دهد تا به صورت خودکار بتوان به تمام صفحات و task flowهای موجود در برنامه مجوزدهی کرد که ما انتخاب اول آن را تغییر نداده تا خودمان به صورت دستی این مجوزدهی را با توجه به نیازمان انجام دهیم. دکمه Next را برای رفتن به مرحله بعد کلیک نمایید.

۵. در این مرحله می‌توان تنظیم کرد که پس از ورود موفق کاربر، او را به یک صفحه خاص مثلا صفحه اصلی برنامه فرستاد. ما این قسمت را به صورت پیش فرض رها کرده و این امکان را فعال نخواهیم کرد تا مکانیسم پیش‌فرض ADF پس از ورود موفق کاربر را بر هم نزنیم. ADF به صورت پیش فرض کاربر را مجددا به همان صفحه‌ای که از آنجا برای ورود به صفحه ورود هدایت شده، باز می‌گرداند.کلیک دکمه Next برای ورود به مرحله بعد تنها کاریست که باید انجام دهید.

۶. در این مرحله خلاصه‌ای از اتفاقاتی که قرار است با زدن دکمه Finish رخ دهد را برای شما به نمایش می‌گذارد. دکمه finish را کلیک نمایید تا تغییرات نهایی و ADF Security فعال گردد.

۷. پس از فعال‌سازی ADF Security نوبت به تنظیم آن با توجه به نیازمان می‌باشد. در ابتدا باید یک role با نام myRole ایجاد نماییم. برای این کار از منوی application menu داخل گزینه Secure منوی Application Roles را کلیک نمایید تا صفحه مربوطه باز گردد.

۸. با زدن دکمه مثبت سبز رنگ (‌شماره یک در تصویر) یک role جدید ایجاد نموده و عنوان ( شماره دو در تصویر)آن‌را به myRole و یا هرچیز دیگری که مایل هستید تغییر دهید و یا مقدار آنرا بدون تغییر رها کنید.

۹. برای ورود به برنامه نیاز به یک نام کاربری و رمز عبور داریم که برای ایجاد آن باید از Application Menu در گزینه Secure منوی Users را کلیک نماییم تا صفحه مربوطه باز شود.

۱۰. دکمه مثبت سبز ( شماره یک در تصویر زیر ) را کلیک نمایید تا کاربر جدید ایجاد گردد. نام کاربری(شماره دو در تصویر زیر) usr (دلخواه بوده و هرچیز دیگری می‌تواند باشد) را برای آن وارد نمایید . رمز عبور را نیز وارد نموده و در انتها دکمه مثبت سبز ( شماره سه در تصویر) را کلیک نموده و role که در مرحله قبل ایجاد کردید را برای کاربر انتخاب نمایید.

۱1. در انتها باید منابع برنامه را با توجه به سیاست‌های امنیتی مورد نیاز مجوزدهی نمود . در این برنامه ما تنها یک role و یک task flow داریم و تنها تنظیمی که لازم می‌باشد دادن مجوز اجرای task flow به کسانی که مجوز myRole را دارند. برای این کار از Application Menu و گزینه Secure منوی ADF Policies را کلیک نمایید تا صفحه مربوطه باز شود.

۱۲. درtask flow ساخته شده را در صفحه باز شده ملاحظه خواهید نمود. آن را انتخاب نمایید و دکمه مثبت سبز(شماره یک در تصویر) را کلیک نمایید. لیست تمام roleهای موجود در برنامه چه آنهایی که خودتان ساخته‌اید و یا به صورت پیش فرض وجود دارند نمایش داده می‌شود. myRole را انتخاب نمایید تا task flow توسط کاربرانی که این مجوز را دارند قابل اجرا گردد.

تبریک می‌گویم تمام مراحل را به خوبی به پایان رساندید و حال کافیست برنامه را اجرا نمایید و ملاحظه نمایید که برنامه در ابتدا از شما نام کاربری و رمزعبور میخواهد و سپس صفحه main را به شما نمایش می‌دهد. دقت نمایید که برای اجرا بر روی main درون SecureTF کلیک نموده و اجرا را کلیک نمایید.

برای تست صحت عملکرد myRole را از کاربر خود بگیرد یا به عبارت دیگر آنرا از لیست roleهای کاربر در منوی Users گزینه Secure حذف نمایید و سپس برنامه را اجرا نمایید و با تصویر زیر یا به عبارت دقیق‌تر با خطای زیر روبرو خواهید شد.

نکته آخر اینکه برای حذف ADF Security کافیست همانند مرحله ۲ ویزارد آنرا اجرا نمایید و این بار گزینه آخر Remove ADF Security Configuration را انتخاب نمایید و دکمه Finish را کلیک نمایید تا تمام تنظیمات امنیتی برنامه با چند کلیک ساده حذف گردد.

در پایان اشاره می‌شود که می‌توان نام کاربری و رمزعبور را از فراهم کنندگان دیگری همچون LDAP، پایگاه داده و سایر مواردی که وجود دارد بدست آورد و از صحت آن اطمینان حاصل نمود که در آینده نحوه استفاده از پایگاه داده را شرح خواهم داد.

فایل مثال

فایل PDF

با تشکر

فایل پیوست:
خواندن بیشتر
royal visionنحوه فعال سازی ADF Security

نحوه ایجاد لیست مقادیر (LOV)

در برنامه‌های کاربردی همیشه فرم‌هایی وجود دارند که یک فیلد آن لیستی از مقادیر می‌باشد که کاربر باید از بین آنها انتخاب نماید. این لیست مقادیر گاه می‌تواند از یک جدول دیگر در پایگاه داده باشد و گاه می‌تواند یک لیست استاتیک از مقادیر باشد. برای روشن شدن بیشتر موضوع در خلال این مقاله مثالی طرح می‌گردد و گام به گام مراحل مورد نیاز شرح داده می‌شود. برای مثال از جدول کارمندان و دپارتمان‌ها در HR استفاده می‌کنیم و لیست دپارتمان‌ها را به صورت لیست مقادیر در فرم کارمند پیاده‌سازی می‌نماییم.

شرح 
در ابتدا entity و view و ارتباطات بین کارمندان و دپارتمان‌ها را ایجاد کرده. قابل ذکر است که ارتباطات بین کارمند و دپارتمان تاثیری بر ساخت لیست مقادیر فیلد دپارتمان در فرم کارمند ندارد پس نگران اینکه چه ارتباطی لازم است ایجاد گردد نباشید و از ویزارد Jdeveloper کمک گرفته و بگذارید این مورد به صورت خودکار انجام گیرد. برای این مثال من فقط مدل را می‌سازم و با نرم‌افزار تستر نتیجه را به شما نشان خواهم داد.

حال باید پس از ایجاد Viewهای مورد نیاز به سراغ مواردی برویم که برای ساخت لیست مقادیر به آن‌ها نیاز داریم. در این مثال View کارمندان را باز کنید. برای ساخت لیست مقادیر در ابتدا باید View Accessors مورد نیاز را ایجاد نمایید. برای این‌کار به قسمت View Accessors در view کارمند بروید.

با زدن دکمه مثبت سبز ( سمت راست بالا) فرم مخصوص برای ایجاد View Accessors باز می‌گردد. در سمت چپ این فرم لیست تمام View موجود نمایش داده می‌شود تا بتوانید از بین آن‌ها Viewهای مورد نیاز خود را پیدا و انتخاب نمایید

در این فرم شما باید Viewهایی که می‌خواهید به صورت یک لیست مقادیر در View اصلی در اختیار کاربر قرار دهید را انتخاب و آن‌ها را به سمت راست و زیر View اصلی ببرید. در این مثال چون قصد داریم لیست دپارتمان‌ها را به صورت لیستی از مقادیر نمایش دهیم در سمت چپ View دپارتمان را انتخاب (۱) و با زدن فلش وسط(۲) به سمت راست برده و در زیر View کارمند(۳) قرار می‌دهیم.
در همین‌جا شما می‌توانید قبل از اینکه آنرا به سمت راست ارسال نمایید اسم دلخواهتان را با استفاده از inputbox زیرین آن(۴) مشخص نمایید. این اسم کمک می‌کند تا خوانایی برنامه‌تان با استفاده از اسامی مناسب و با معنی بالاتر برود.

در برخی از حالات ما نیاز پیدا خواهیم کرد که لیست موجود را فیلتر نماییم. مثلا لیست دپارتمان‌هایی که در یک مکان خاص وجود دارند را نشان داده و همه لیست را در اختیار کاربر قرار ندهیم تا انتخاب محدودتری داشته باشد. برای این منظور باید از امکان View Criteria در ADF استفاده نمود. پس از ارسال View به سمت راست با انتخاب آن در سمت راست دکمه Edit بالای کادر View Accessors فعال می‌گردد. با زدن آن فرمی باز می‌گردد که View Criteriaهای تعریف شده در View را نمایش می‌دهد که شما می‌توانید هر کدام از آنها را که خواستید انتخاب و با زدن فلش به سمت راست ارسال نمایید تا فعال شوند و لیست مقادیر را فیلتر نماید. برای نشان دادن این مورد یک View Criteria بر اساسCounty id در View دپارتمان ایجاد کرده‌ام و لیست مقادیر را برای مکان با شناسه ۱۷۰۰ فیلتر می‌نمایم تا فقط دپارتمان‌های آن مکان نشان داده شود.
* دوستانی که با نحوه ایجاد View Criteria آشنایی ندارند می‌توانند از سایر منابع یا پست‌های بنده برای آشنایی با آن استفاده نمایند.

تا اینجا مرحله اول کار یعنی source داده‌هایی که می‌خواهیم به صورت لیست مقادیر نشان دهیم را ساخته‌ایم. حال باید فقط مشخص کنیم که این لیست مقادیر را برای کدام فیلد می‌خواهیم نمایش دهیم تا کاربر از بین آنها یکی را انتخاب نماید. در View کارمند به قسمت Attributes بروید و فیلد شناسه دپارتمان (DepartmentId) را انتخاب نمایید تا برای این فیلد لیست مقادیر ایجاد نمایید.

حال با زدن دکمه مثبت سبز در قسمت List of Values (همانطور که در تصویر قبل مشخص شده است) فرم مربوط به ساخت لیست مقادیر نشان داده می‌شود. در این فرم دو تب Configuration و UI Hints ملاحظه می‌نمایید که هرکدام را به صورت جداگانه توضیح میدهم.

تب Configuration
در این تب باید دیتا سورس مربوط به لیست مقادیر این فیلد(DepartmentId) را مشخص کرد و همچنین مقادیری که باید این لیست مقادیر به View اصلی باز گرداند که عموما شامل شناسه می‌باشد. با کلیک بر روی قسمت List Data Source نام View Accessors که در مرحله قبل ایجاد کردید را ملاحظه می‌نمایید. آنرا انتخاب نمایید. در قسمتList Attribute باید فیلد مورد نظر برای بازگشت مقدار آن به View کارمند را مشخص نمایید که عموما شناسه می‌باشد. ما فیلد DepartmentId را انتخاب می‌‌نماییم. در اینجا کار ما با این تب به اتمام می‌رسد.

تب UI Hints
این تب شامل تنظیماتی است که نحوه نمایش این لیست مقادیر در قسمت واسط کاربر(UI) را مشخص می‌نماید. تنظیماتی از قبیل چه کامپوننتی برای نمایش استفاده شود . چه فیلدهایی از View دپارتمان به جای شناسه آن نمایش داده شود و سایر تنظیماتی که تاثیر آن را فقط در واسط کاربر خود خواهید دید. در این تب من فقط DepartmentName را در قسمت Display Attributes انتخاب می‌کنم که آن را به جای شناسه نمایش دهد سایر موارد را به صورت پیش‌فرض خود رها می‌نمایم. در صورت علاقه به دانستن جزییات بیشتر به منابع رسمی مراجعه نمایید.

در نهایت فیلد DepartmentId در View کارمند شما شامل یک LOV از نام دپارتمان‌ها شده است

تبریک می‌گویم شما با موفقیت تمام مراحل مورد نیاز را پشت سرگذاشتید و حال با اجرای مدل توسط تستر در فرم کارمند می‌توانید نتیجه تلاش خود را ملاحظه نمایید.

فایل مثال

فایل PDF

امیدوارم که این مطلب برایتان مفید بوده باشد.
با تشکر

qresult datamodel1 - نحوه ایجاد لیست مقادیر (LOV)
shuttle insertdlg - نحوه ایجاد لیست مقادیر (LOV)
tester main userservice - نحوه ایجاد لیست مقادیر (LOV)
transientattr - نحوه ایجاد لیست مقادیر (LOV)
viewcriteria editor - نحوه ایجاد لیست مقادیر (LOV)
خواندن بیشتر
royal visionنحوه ایجاد لیست مقادیر (LOV)

نحوه گرفتن ردیف‌های انتخاب شده در جدول

در برنامه‌های عمومی تحت وب غالبا نیازی به این صورت وجود دارد که تعدادی از ردیف‌ها در جدول باید توسط کاربر انتخاب شوند و بر روی آنها عملیاتی انجام شود. مثلا برای افزودن گروه‌های کاربری به کاربر به صورت که لیستی از گروه‌های کاربری در اختیار کاربر قرار می‌گیرد و کاربر با انتخاب تعدادی از آنها، گروه‌ها را برای کاربر اضافه می‌نماید. در این شرایط ما نیاز داریم که ردیف‌های انتخاب شده را از جدول گرفته و سپس عملیات مورد نیاز را بر روی آنها انجام دهیم. برای تشریح این موضوع مثالی به این صورت انجام می‌گیرد که از بین لیست کارمندان آن‌هایی که انتخاب گردیده اند نامشان در کنسول چاپ می‌گردد.

شرح
در ابتدا یک صفحه شامل لیست کارمندان با استفاده از کامپوننت جدول بسازید. پس از ایجاد صفحه ویژگی‌های مشخص شده در تصویر زیر را همانند تصویر تغییر دهید.

*دلیل حذف مقدار SelectedRowKeys این می‌باشد که آخرین ردیف کلیک شده بر روی آن را در ردیف‌های انتخاب شده قرار می‌دهد و به همین دلیل دیگر نمی‌توان سایر ردیف‌هایی که قبلا انتخاب شده‌اند را گرفت. پس مهم است که حتما آنرا حذف نمایید.
پس از آماده سازی صفحه حال یک backing bean با نام RowManipulate ایجاد نمایید. این backing bean دارای یک فیلد به نام employTbl از نوع RichTable می‌باشد. برای این فیلد Accessors های آنرا ایجاد نمایید. یک متد نیز با نام getSelectedRows ایجاد کنید و کد زیر را درون آن قرار دهید.

RowKeySet selectedEmps = getEmployTbl().getSelectedRowKeys();<br />
Iterator selectedEmpIter = selectedEmps.iterator();<br />
DCBindingContainer bindings =<br />
(DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry();<br />
DCIteratorBinding empIter =<br />
bindings.findIteratorBinding("EmployeesView1Iterator");<br />
RowSetIterator empRSIter = empIter.getRowSetIterator();<br />
while(selectedEmpIter.hasNext()){<br />
Key key = (Key)((List)selectedEmpIter.next()).get(0);<br />
Row currentRow = empRSIter.getRow(key);<br />
System.out.println(currentRow.getAttribute("LastName"));<br />
}<br />
return null;

سپس درون صفحه یک دکمه قرار دهید و آنرا به getSelectedRows وصل نمایید تا به محض کلیک متد را فراخوانی نماید.

جدول درون صفحه را به فیلد employTbl درون backing bean وصل نمایید.

* کل عملیات اتفاق افتاده در متد getSelectedRows به این شرح می‌باشد که با استفاده از متد getSelectedRowKeys کلید تمام ردیف‌های انتخاب شده در جدول را گرفته ایم. سپس بر روی View کارمندان با استفاده از کلید ردیف‌های انتخاب شده تک تک آنها را جستجو کرده ایم و در نهایت نام‌ آن‌ها را استخراج و در کنسول چاپ کرده ایم

تبریک می‌گویم شما با موفقیت تمام کارهای موردنیاز را انجام دادید . حال کافیست برنامه را تست نمایید.

امیدوارم مطلب براتون مفیده بوده
با تشکر

فایل PDF

فایل مثال

فایل پیوست:
خواندن بیشتر
royal visionنحوه گرفتن ردیف‌های انتخاب شده در جدول

ارسال پارامتر به TaskFlow

در فریم‌ورک توسعه برنامه‌های کاربردی تحت وب شرکت اوراکل(ADF) به صورت بسیار مطلوبی از TaskFlow پشتیبانی می‌گردد. استفاده از TaskFlow در برنامه باعث می‌گردد تا برنامه شما دارای یک سری از ویژگی‌های منحصر به فردی گردد که سایر برنامه‌ها دارای چنین قابلیت‌هایی نباشند. TaskFlow این قابلیت را خواهد داد تا برنامه را به واحدهای کوچکتر تقسیم کرد. این تقسیم‌بندی امکان استفاده مجدد را بالا می‌برد و همچنین تغییرات آینده را بسیار سهل و آسان می‌نمایند. در ضمن در ارتباط با کنترل دسترسی کاربران نیز کمک بسزایی می‌نماید زیرا قابلیت‌های امنیتی ADF بر روی TaskFlow ها اعمال می‌گردد.

*برای کسب اطلاعات بیشتر در ارتباط با امنیت در ADF به پست نحوه فعال‌سازی ADF Security مراجعه نمایید.

استفاده از TaskFlow در برنامه گاهی نیازی برای شما ایجاد می‌نماید که بین دو TaskFlow مقداری را به عنوان پارامتر ورودی از یک TaskFlow به TaskFlow دیگر ارسال نماید. به تجربه برای من ثابت شده که با استفاده از قابلیت ارسال پارامتر بین TaskFlowها می‌توان برنامه‌های به مراتب موثرتر با ساختار بهتری طراحی و پیاده‌سازی نمود.

در این مقاله سعی بر آن دارم تا این قابلیت را با استفاده از یک مثال شرح داده تا بیشتر با این موضوع آشنا گردید. مثال مورد استفاده به این صورت بوده که یک TaskFlow برای انجام عملیات ایجاد، ویرایش و حذف کارمند در نظر گرفته شده و با توجه به پارامتر ارسالی به آن عملیات مناسب را انجام می‌دهد. نتیجه‌ای نیز با توجه به کلیک کاربر بر روی دکمه ثبت و یا انصراف باز می‌گردد تا عملیات Commit و یا Rollback انجام گیرد. در این مثال هم نحوه ارسال پارامتر به TaskFlow و هم دریافت مقدار از TaskFlow را خواهید دید. دقت بفرمایید که برای دریافت پارامتر از کامپوننت Task Flow Return استفاده نخواهد شد بلکه برای آشنایی از مقادیر بازگشتی استفاده می‌گردد.

در این مثال یک TaskFlow با عنوان empManagement ایجاد می‌گردد و یک TaskFlow با عنوان empCUD که سه عملیات ایجاد، ویرایش و حذف را انجام می‌دهد empCUD یک پارامتر ورودی با عنوان operation دارد که عملیاتی را که باید انجام دهد مشخص می‌نماید. empCUD یک نتیجه بر می‌گرداند که بر اساس آن یا Commit و یا Rollback انجام می‌گیرد.

شرح

یک TaskFlow ایجاد کنید و در قسمت Overview یک پارامتر ورودی با عنوان operation و یک مقدار خروجی با عنوان result همانند تصویر زیر ایجاد کنید.

یک Router در TaskFlow قرار دهید و آن‌را همانند تصویر زیر تنظیم کنید.

این Router به این صورت تنظیم شده که اگر operation برابر create باشد خروجی آن create، اگر برابر Delete باشد خروجی آن Delete و در غیر این‌صورت خروجی آن edit می‌باشد تا با توجه به این خروجی‌ها عملیات مناسب انجام گردد.

صفحه‌ای با عنوان empForm ایجاد کنید. View کارمند را بر روی آن کشیده و به صورت فرم رها کنید. در صفحه دو دکمه قرار دهید. برای دکمه ثبت یک کامپوننت setActionListener قرار دهید تا مقدار ok را درون result قرار دهد. برای دکمه انصراف نیز تکرار کنید اما مقدار cancel را درون result قرار دهد.

در صورتی که خروجیRouter برابر با create باشد باید ابتدا عملیات CreateInsert انجام گردد. سپس به صفحه فرم کارمند ارسال گردد تا اطلاعات آن توسط کاربر تکمیل گردد و اگر برابر با edit باشد باید مستقیما به صفحه هدایت گردد.

در صورتی که خروجی Router برابر با delete باشد باید ابتدا کاربر را به صفحه‌ای هدایت کنیم که حذف را تایید نماید و در صورت تایید عملیات حذف را انجام دهیم . این صفحه نیز همانند صفحه empForm می‌باشد با این تفاوت که دکمه ok دارای action برابر با delete می‌باشد تا بر اساس آن delete صورت گیرد.

تا اینجا TaskFlow انجام عملیات آماده شده است و حال نوبت به TaskFlow مدیریت کارمندان رسیده است.

ساخت empManagement
یک صفحه که شامل لیست کارمندان است قرار می‌دهیم. سه دکمه نیز در این صفحه برای انجام سه عملیات ایجاد، ویرایش و حذف قرار می‌دهیم.
یک پارامتر همانند تصویر زیر با عنوان operationResult ایجاد می‌کنیم تا نتیجه بازگشتی از empCUD را درون آن قرار دهیم و با توجه به مقدار آن Commit یا Rollback را اجرا نماییم.

از مرحله قبل empCUD ساخته شده را بر روی empManagement قرار میدهیم و همانند زیر آنرا را برای فشرده شدن دکمه ایجاد تنظیم می‌نمایم تا با زدن این دکمه empCUD برای عملیات ایجاد فراخوانی گردد و نتیجه عملیات خود را نیز در operationResult قرار دهد.

همین مرحله را دوبار دیگر انجام دهید با این تفاوت که مقدار پارامتر ورودی empCUD را تغییر دهید تا عملیات edit و delete نیز انجام گیرد.

یک Router در empManagment قرار دهید و با توجه به مقدار operationResult عملیات Commit یا Rollback را انجام دهید.

تبریک می‌گویم شما تمام مراحل را با موفقیت پشت سر گذاشتید. حال برنامه را تست نمایید و نتیجه تلاش خود را ملاحظه فرمایید.

جمع‌بندی
در این مثال ما با استفاده از قابلیت ارسال و دریافت پارامتر بین TaskFlowها در ADF توانستیم یک TaskFlow بنویسیم که سه عملیات را با توجه به مقدار پارامتر operation که در زمان فراخوانی TaskFlow آنرا مقداردهی کردیم، انجام دهد. همچنین توانستیم با توجه به قابلیت بازگشت مقدار از TaskFlow(همانند return متدها) به TaskFlow ای که آنرا فراخوانی کرده نتیجه عملیات را گزارش دهیم تا بر اساس آن تصمیم‌گیری نماید. در این مثال ما با مقداردهی result در empCUD و بازگشت آن به empManagement و سپس ذخیره آن در resultOperation توانستیم با توجه به مقدار ok یا cancel بودن عملیات، Commit و Rollback را در empManagement انجام دهیم.

فایل PDF

فایل مثال

امیدوارم که مطلب مفیدی برایتان بوده باشد
با تشکر

فایل پیوست:
خواندن بیشتر
royal visionارسال پارامتر به TaskFlow

اعتبارسنجی کاربر با استفاده از جدول پایگاه داده

0
همانطور که در پست نحوه فعال‌سازی ADF Security تشریح شد شما قادر شدید تا برنامه‌های خود را امن نمایید و برای دسترسی به محتوای آن مکانیزم ورود را فعال نمایید. در پست مذکور شما یک کاربر را در زمان نوشتن برنامه ایجاد کردید و کاربر با استفاده از آن توانست وارد برنامه شود. در محیط واقعی این حالت کاربردی ندارد به این خاطر که کاربران باید قابل تغییر باشند و حذف و اضافه گردند. در روش قبل شما برای ایجاد یک کاربر جدید باید برنامه را مجدد کامپایل و در سرور قرار می‌دادید که این موضوع اصلا قابل تحمل و اجرایی نمی‌باشد. برای رفع این معضل شما باید ADF Security را به گونه‌ای تنظیم نمایید تا بتواند کاربران خود را از محل دیگری اعتبارسنجی نماید. روش‌‌های بسیاری وجود دارد که برای مثال می‌توان به استفاده از LDAP و پایگاه داده اشاره کرد. قصد من توضیح روش استفاده از پایگاه داده می‌باشد.
در بحث ADF Security دو جنبه وجود دارد. جنبه اول صحت اطلاعات کاربر یعنی تطبیق نام کاربری و رمز عبور و جنبه دوم سطح دسترسی (Role) کاربر می‌باشد. به همین خاطر در این روش باید پایگاه داده شامل اطلاعات مورد نیاز باشد که برای این موضوع من سه جدول به شرح زیر فراهم نموده ام .
۱. UserTbl که شامل اطلاعات نام کاربری و رمز عبور می‌باشد.
۲. RoleTbl که شامل لیست دسترسی‌ها می‌باشد. که فقط دارای فیلد عنوان سطح دسترسی می‌باشد.
۳. UserRoleTbl که مشخص می‌نماید کاربر چه دسترسی‌هایی دارد و شامل فیلد نام کاربری و عنوان سطح دسترسی می‌باشد.
اسکریپت مربوط به ایجاد این جداول در پیوست آمده است. در این اسکریپت یک کاربر با نام admin و رمزعبور admin با تمام دسترسی‌ها نیز وجود دارد.برای این که این مقاله طولانی نشود و شما نیز با برخی از مطالب مورد نیاز در این مقاله آشنایی دارد از تشرح برخی موارد خودداری می‌نمایم. برای مثال مربوط به این قسمت من یک صفحه از لیست دپارتمان‌ها و مکانهای پایگاه داده HR ایجاد کرده ام تا کنترل دسترسی را بر روی آنها قرار دهم. سپس یک صفحه با نام User که بتوانم عملیات CRUD را برای جدول‌ USERTBL و USERROLETBL انجام دهم ایجاد نموده‌ام. این صفحه را ایجاد کرده ام که نشان دهم می‌توانید کاربر جدید ایجاد نموده و به آن دسترسی داده تا بتواند وارد برنامه گردد. چون دسترسی‌ها را در زمان برنامه نویسی باید مشخص نمایید و قسمت‌های مختلف برنامه باید دسترسی‌هایش را تعیین نمایید پس لیست دسترسی‌ها یک لیست ثابت بوده و نیاز به عملیات CRUD بر روی آن نمی‌باشد و لذا در مدل فقط یک View فقط خواندنی از‌ آن می‌سازیم.
سیاست اعمال شده من در این مثال به این صورت است که سه سطح دسترسی به نام‌های Department و Location و manager دارم که کاربرانی که دسترسی Department را داشته باشند می‌توانند لیست دپارتمان‌ها و آنهایی که سطح دسترسی Location را دارند می‌توانند لیست مکان‌ها را مشاهده نمایند و افرادی که دسترسی manager را داشته باشند می‌توانند بر روی کاربران و سطوح دسترسی آن‌ها مدیریت نمایند.
نکته : دقت نمایید که سیاست امنیتی مورد استفاده در برنامه‌ها کاملا به نیاز و طراحی شما در برنامه‌هایتان بر می‌گردد و یک کار کاملا سلیقه‌ای می‌باشد. ممکن است شما از این الگو استفاده ننمایید و الگوی ویژه‌ی خودتان را طراحی نمایید. دستتان کاملا برای این موضوع باز می‌باشد. برای مثال من عموما از گروه‌های کاربری استفاده می‌نمایم و برای آنها سطح دسترسی تعیین می‌نمایم و سپس کاربر را به یک یا چند گروه اضافه می‌نمایم تا آن کاربران نیز سطح دسترسی همان گروه را داشته باشند.حال که صفحات مورد نیاز خودتان را ایجاد کردید نوبت به انجام تنظیمات ADF Security میرسد. همانطور که می‌دانید کنترل امنیت برنامه ها توسط weblogic انجام می‌گیرد یعنی تشخیص کاربر و جلوگیری از دسترسی‌های غیرمجاز توسط weblogic صورت می‌گیرد. پس برای تنظیمات باید در دو قسمت کارهایی انجام دهیم. قسمت اول این است که weblogic باید چگونه نام کاربری و رمزعبور را چک نماید و سطح دسترسی آن کاربر چیست و قسمت دوم اینکه صفحات برنامه توسط چه دسترسی‌هایی قابل مشاهده می‌باشد.
در مرحله اول تنظیمات مربوط به weblogic را انجام می‌دهیم.
ابتدا وارد کنسول weblogic شوید و یک Data Source به پایگاه داده مورد نظرتان برای گرفتن اطلاعات کاربر ایجاد نمایید. در این مثال ما برای پایگاه داده HR یک Data Source به نام HRDS می‌سازیم.
برای ایجاد Data Source مسیر زیر را در منوی سمت چپ کنسول پیگری نمایید
Services → JDBC → Data Sources
دکمه new را زده تا یک Data Source جدید ایجاد گردد و اطلاعات را همانند تصویر زیر تکمیل و دکمه Next را کلیک کنید.در صفحه بعد نیز دکمه Next را کلیک نمایید و در صفحه بعد اطلاعات را همانند تصویر تکمیل نمایید. دقت نمایید که این اطلاعات مختص سیستم من می‌باشد و در صورت تفاوت این اطلاعات مقدار صحیح و مربوط به خودتان را در آن قرار دهید.پس از کلیک دکمه Next در صفحه‌ بعد اطلاعات وارد شده مجددا نمایش داده می‌شود. دکمه Test Configuration را کلیک نمایید تا تنظیمات را تست نمایید. در صورت صحت اطلاعات پیام موفقیت را مشاهده خواهید نمود.

پس از اطمینان از صحت تنظیمات دکمه Finish را کلیک نمایید تا تنظیمات را ذخیره نمایید. سپس از منوی سمت چپ بر روی گزینه Security Realms کلیک نماید. بر روی myrealm کلیک نمایید تا وارد تنظیمات آن گردیم. به بخش Provider مراجعه نمایید و بر روی DefaultAuthenticator کلیک نمایید و مقدار Control Flag را برابر Sufficient قرار دهید

مجددا به قسمت Provider بازگردید و دکمه New را کلیک نمایید تا یک Authentication provider جدید ایجاد نمایید. در صفحه اول یک نام وارد نمایید و نوع آن را برابر SQLAuthenticator قرار دهید و دکمه Ok را کلیک نمایید. بر روی مورد جدید ساخته شده خودتان کلیک نمایید تا وارد آن گردیید. Control Flag آن را برابر Sufficient قرار دهید و سپس به تب Provider Specific بروید و همانند تصویر زیر مقادیر را وارد نمایید.

در ادامه این قسمت یک سری دستورات SQL وجود دارد که weblogic از‌ آن‌ها برای استخراج اطلاعات مورد نیاز خود از پایگاه‌داده استفاده می‌کند که در زیر من لیست مقادیر و فیلدهایی که باید تغییر کنند را برای شما آورده ام. این Queryها در صورت تغییر ساختار جداول باید تغییر نمایند و Queryهای درست در آن‌ها قرار گیرد.

sql get users password:<br />
SELECT PASSWORD FROM USERTBL WHERE USERNAME = ?</p>
<p>sql user exists:<br />
SELECT USERNAME FROM USERTBL WHERE USERNAME = ?</p>
<p>sql list member groups:<br />
SELECT ROLETITLE FROM USERROLETBL WHERE USERNAME = ?</p>
<p>sql list users:<br />
SELECT USERNAME FROM USERTBL WHERE USERNAME LIKE ?</p>
<p>sql list groups:<br />
SELECT ROLETITLE FROM ROLETBL WHERE ROLETITLE LIKE ?</p>
<p>sql group exists:<br />
SELECT ROLETITLE FROM ROLETBL WHERE ROLETITLE = ?</p>
<p>sql is member:<br />
SELECT USERNAME FROM USERROLETBL WHERE ROLETITLE = ? AND USERNAME = ?</p>
<p>sql list group members :<br />
SELECT USERNAME FROM USERROLETBL WHERE ROLETITLE = ? AND USERNAME LIKE ?<br />

پس از اعمال این تغییرات در فیلدهای مربوطه دکمه Save را کلیک نمایید تا تغییرات ذخیره گردد. پس از انجام این تغییرات شما باید weblogic را restart نمایید تا تغییرات اعمال گردد.

حال تغییرات سمت weblogic کامل شده و باید تنظیمات درون برنامه را انجام دهیم. برای انجام این تغییرات ابتدا ADF Security را فعال نمایید. سپس تنها کافیست که در قسمت Application Role بخش Security ارتباط بین Role های درون پایگاه داده و Roleهای درون برنامه را ایجاد نماید و سپس در قسمت ADF Policies نیز مشخص نمایید چه دسترسی‌هایی مجاز به دیدن چه قسمت‌هایی از برنامه هستند. این دفعه دیگر نیازی به ایجاد کاربر نمی‌باشد و کاربران درون پایگاه داده استفاده می‌گردند. در این قسمت تنها کافیست که معین نماییم دسترسی‌های موجود در پایگاه‌داده(Enterprise Role) معادل کدام دسترسی‌ها در سطح برنامه(Application Role) هستند. چون سیاست ما در این مثال به این‌گونه است که عینا سطح دسترسی در پایگاه‌داده برابر با سطح دسترسی در سطح برنامه است پس سه سطح دسترسی موجود در پایگاه داده manager, Location و Department را درون Application Role و Enterprise Role ایجاد کرده و آنها را در تب Enterprise Role به معادل یکدیگر assign می‌نمایم.

در واقع سه سطح دسترسی Department و Location و manager را هم در قسمت Application Role و هم در قسمت Enterprise Role ایجاد کرده‌ام و سپس در قسمت Enterprise Role در بخش Assigned Role معادل هر کدام را از Application Role انتخاب کرده و به آن متصل نموده‌ام. در نهایت سطح دسترسی صفحات را مشخص می‌نمایم.
صفحه main دارای سه دکمه برای پیمایش بین صفحات می‌باشد که این دکمه‌ها با توجه به سطح دسترسی کاربر وارد شده به نمایش گذاشته می‌شوند. به عنوان مثال کسی که دسترسی Location را نداشته باشد دکمه پیمایش به صفحه Location را مشاهده نخواهد کرد. برای انجام این موضوع از expression زیر در فیلد Rendered دکمه Location استفاده شده است.

#{securityContext.userInRole['Location']}

نکته: صفحه main نیز باید تحت ADF Security باشد برای اینکه بتوانید برای آن سطح دسترسی تعیین نمایید باید pageDef آن‌را ایجاد نمایید. برای این‌کار بر روی آن کلیک راست نمایید و Go to Page Definition را کلیک نمایید تا دیالوگ ایجاد page Def باز شود و کافیست Yes را کلیک نمایید. حال به ADF Policies بروید و برای آن دسترسی authentication Role را مشخص نمایید.

تبریک می‌گویم شما تمام مراحل را با موفقیت به اتمام رساندید و حال برنامه خود را تست نمایید.

امیدوارم این مطلب برایتان مفید باشد
با تشکر

فایل PDF

فایل مثال

اسکریپت ایجاد جداول مورد نیاز

خواندن بیشتر
royal visionاعتبارسنجی کاربر با استفاده از جدول پایگاه داده