یادداشتهای یک برنامه نویس

بیان تجربیات و دیدگاه های یک برنامه نویس در مورد نرم افزار , طراحی و تولید برنامه با استفاده از تکنولوژی های مایکروسافت

یادداشتهای یک برنامه نویس

بیان تجربیات و دیدگاه های یک برنامه نویس در مورد نرم افزار , طراحی و تولید برنامه با استفاده از تکنولوژی های مایکروسافت

چهارشنبه, ۱۱ تیر ۱۳۹۳، ۱۱:۴۹ ق.ظ

دردسرهای Simple Membership در MVC

بر خلاف تجربه های بی دردسر استفاده از SqlMembership به نظر می رسد روشهای استاندارد استفاده از SimpleMembership مخصوصا در MVC با مشکلاتی روبرو می باشد که از میان آنها می توان به موارد زیر اشاره کرد:
اول آنکه چنانچه مطلع می باشید در Template استاندارد یک پروژه MVC وظایف مورد نیاز جهت Initialize نمودن SimpleMembership بر اساس مفهوم Filter ها ایجاد شده است که مشخصا در فولدر Filters ، کلاس InitializeSimpleMembershipAttribute عهده دار انجام این وظیفه می باشد . اما چنانچه صریحا در قالب یک کامنت مشاهده می کنیم :



Create the SimpleMembership database without Entity Framework migration schema
 


به دلایلی Table های ایجاد شده به استثنای UserProfile فاقد Schema و Metadataی مورد نیاز جهت استفاده در Entity Framework می باشند که با توجه به نیاز مبرمی که برای تطبیق Simple Membership با Business Models وجود دارد این کار با اشکال روبرو خواهد شد و نیاز به استفاده از روشهای دیگر ضروری به نظر می رسند .
به عنوان مثال مفهوم Roles و نقش ها که مبنای اصلی Authorization در ملاحظات امنیتی برنامه ها می باشد صرفا با استفاده از متدهای استاتیک کلاس Roles میسر می باشند که اغلب نیاز های موجود را برطرف نمی سازد. البته مورد ذکر شده دقیقا به همین شکل در Sql Membership و بدون تغییر به Simple Memebership منتقل شده است . تجربه شخصی من این است که در مباحث پیاده سازی Authorization (ایجاد نقش ها و گروههای امنیتی، عضویت کاربران در گروهها، بررسی مجوزهای کاران بر اساس مجوز های منتسب به گروهها و...) استفاده از Flagged Enumeration ها در C# بسیار کارآمد و قابل اطمینان می باشد . با استفاده از این مفهوم همچنین اختصاص کاربران به گروهها (Roles) ، بررسی عضویت یا عدم عضویت کاربران در Role ها و ... صرفا با استفاده از اپراتورهای And و OR بیتی (Bitwise) میسر خواهند بود : در زیر یک نمونه از این ساختار را مشاهده می نمایید :


[Flags]
public enum HelpdeskPermissions
{
HP_Anonymous = 0,
HP_SiteMaster = 1,
HP_SiteAdmin = 2,
HP_SiteExpert=4,
HP_Associates=8,
HP_RegionUser=16,
HP_GISDemo=32,
HP_GISAdmin=64,
HP_Manager = 256
}


چنانچه در ابتدا نیز اشاره شد پیاده سازی مقدار دهی اولیه SimpleMemebership با استفاده از مفهوم Filter ها و به طور مشخص Action Filter و بهره گیری از روش Overload کردن متد OActionExecuting در کلاس منشعب از ActionFilterAttribute بعد از Publish نمودن برنامه در IIS منجر به بروز مشکلاتی میشود که برای برطرف نمودن آن آسانترین راه ممکن، صرفنظر کردن از Filter ها و انتقال متد استاتیک InitializeDatabaseConnection از کلاس WebSecurity به داخل متد Application_Start در Global.asax می باشد .
با این روش امکان استفاده از Simple Membership با نسخه های SQL Server و امکان Publish بی دردسر Application در IIS فراهم خواهد شد .

نظرات  (۱)

سلام بر مهندس بزرگ توی سرچ گوگل به نوشته شما رسیدم . عالی بود مهندس ممنون

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی