در بحث 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
فایل مثال
اسکریپت ایجاد جداول مورد نیاز