‫۱۱ سال و ۴ ماه قبل، چهارشنبه ۸ خرداد ۱۳۹۲، ساعت ۲۰:۳۰
پیشنهاد میکنم از WebKit.net استفاده کنید . یک Wrapper واسه Webkit Engine نوشته و توسعه داده شده توسط زبان C# .
  
من چندی پیش نیاز داشتم از یک Engine مناسب که از CSS3 و HTML5 پشتیبانی کامل بکنه استفاده کنم . طی تحقیقاتم باهاش آشنا شدم . نتیجه رندر این موتور مثل Chrome هست و به خوبی از پس CSS3 بر میاد. برای جزئات بیشتر و دانلود اینجا کلیک کنید

برای مشاهده طیف پشتیبانی هایی که webkit از CSS3 داره این لینک رو ببینید
‫۱۱ سال و ۵ ماه قبل، دوشنبه ۳۰ اردیبهشت ۱۳۹۲، ساعت ۰۰:۳۶
این پروژه صرفا واسه سطح دسترسی نبود یک بخش از CMF شخصی بنده بود با نام نئوکس، فعلا قصد انتشار عمومی اون رو ندارم چون کارای شخصی خودم رو در حال حاضر دارم با اون انجام میدم و دلیل دیگه اینکه وقت پشتیبانی ازش رو در یک محیط عمومی بعد از انتشار مثلا در Gtihub فعلا متاسفانه ندارم. 
فعلا بازده عالی ای داشته این CMF از همه جهات ، اگر تصمیم به انتشار عمومیش گرفتم حتما داخل همین سایت اطلاع رسانی میشه . 
برای مثال یکی از کارایی که باهاش انجام شده سایت شرکت خود بنده هست ، اینجا
یا سایت شرکت رایان صنعت ( سهامی خاص ) با رتبه‌ی یک در چند کلمه‌ی کلیدی به لطف SEO Engine این CMF در اینجا
‫۱۱ سال و ۸ ماه قبل، جمعه ۱۳ بهمن ۱۳۹۱، ساعت ۱۵:۵۵
افزونه‌ی مذکور رو میتونید از سایت رسمی خودش   دریافت کنید .
محتوای این پست صرفا مرتبط است با عنوان پست .

تعدادی از اجزای مهم سیستم امنیتی این افزونه شامل :
 1 ) ارتباط با وب سرویس سایت سازنده و دریافت کد فعال سازی موقت مختص به سیستم شما و ثبت اطلاعات سیستم شما در بانک اطلاعاتی سایت است برای جلوگیری استفاده مجدد از نسخه‌ی ازمایشی بعد از 21 روز . ( البته بعد از 21 روز فقط تعدای از قابلیت‌ها غیر فعال میشوند و بقیه رایگان هستند از جمله دیباگینگ php در vs !) . 
2 ) ایجاد کد منحصر به فرد هر سیستم .
3 ) ترکیب کد منحصر به فرد با شماره pakage ای که بعد از نصب افزونه vs به ان اختصاص میدهد و ... 

در کل نکات جالبی رو رعایت کرده بود و تعداد زیادی از کلاس‌ها رو پیاده سازی کرده بود که ارتباطاتی با هم داشتند فقط و فقط جهت سخت کردن debuging که از کارش خوشم اومد ...
‫۱۱ سال و ۹ ماه قبل، دوشنبه ۱۱ دی ۱۳۹۱، ساعت ۰۱:۱۲
اقای راد من هیچوقت قصد شعار دادن بر مبنای تحلیلات ذهنیم رو نداشتم و نخواهم داشت . 
تمام حالت هایی که تا الان اشاره کردید قابل پوشش هست و در سیستم من در نظر گرفته شده و همچنان مورد تست قرار میگیره و ضعف هاش برطرف میشه . پیاده سازی یک بار انجام میشه ولی استفاده از اون بعد از پیاده سازی در هر کدوم از پروژه هایی که لازم باشه به سادگی ممکن میشه (به نظرم برنامه نویسی شیء گرا زیباست) . اگر توسعه دهندگان همون پایگاه‌های داده‌ی قدرتمند که ذکر کردید همچین طرز فکری داشتن که : (آیا تمامی این بررسی‌ها و پیاده سازی اونها، به ایجاد یک ارتباط ساده و واکشی مجوز جاری کاربر برای درخواست برتری دارند؟) ، هیچوقت قدرتمند و پخته نمیشدند ... این موضوع بر هیچکس پوشیده نیست که دسترسی مکرر به پایگاه داده برای برنامه هایی که ارزشمند هستند و سرعت و انعطاف در اونها مهمه یک نقطه‌ی ضعف هست . شاید همینجور طرز فکر باشه که باعث شده سیستم هایی که در بعضی از اماکن و سازمان هایی دولتی ما استفاده میشه بعد از جا افتادن و زیاد شدن داده‌ها واقعا کار کردن باهاشون عذاب آور و کسل کننده باشه...

انشاالله در چندین ماه اینده بعد از کامل شدن سیستم و انتشار اون میتونید بررسیش کنید اگر مایل بودید. کیت‌های توسعه‌ی اون هم به صورت سورس باز منتشر خواهد شد و در همین سایت هم معرفی میشن. به نظر من ارزشش رو داره که روی جزئیات این سیستم کار کنم و امیدوارم بتونه جای تامل داشته باشه . در اخر من رو ببخشید برادر من هیچوقت قصد جسارت نداشتم به شما و دیگر دوستان . این سایت محیط مقدسی هست چون واقعا مطالب خوبی در اون قرار میگیره امیدوارم بتونم از اطلاعات شما و دیگر دوستان استفاده کنم . یا حق
‫۱۱ سال و ۹ ماه قبل، یکشنبه ۱۰ دی ۱۳۹۱، ساعت ۱۸:۰۲
Cache کوکی برای نگهداری نقش‌های کاربر و Cache سمت سرور برای نقش‌های مشخص شده هر اکشن ...
برای موردی هم که اشاره کردید راه‌های مختلفی میتونه وجود داشته باشه . مثلا شما یک نقش جدید رو برای یک کاربر مشخص کردید . یک کلاس تعریف میکنیم که نگهدارنده‌ی لیست شناسه کاربرانی هست که نقششون در زمانی که انلاین هستن تغییر کرده . بعد از اعمال نقش به این کاربران این لیست بروز رسانی و در کش سمت سرور ذخیره سازی میشه . توجه داشته باشید که این لیست فقط زمانی بروز میشه که نقش کاربری تغییر کرده که انلاین هست. بعد در زمان درخواست یک اکشن توسط یک کاربر، اون لیست که در کش هست و واکشیش با سرعت بسیار بالا انجام میشه بررسی میشه و اگه نام اون کاربر در اون لیست بود مجددا میتونیم لیست نقش‌های اون کاربر رو از بانک استخراج و کوکی اون رو به روز رسانی کنیم . و در اخر هم نام اون از لیست حذف و کش نگهدارنده‌ی لیست به روز میشه ....

این روش میتونه روش خوبی باشه به این دلیل که مگه ممکنه نقش چند کاربر در زمانی که انلاین هستن تغییر کنه ؟ به طور حتم این تعداد خیلی کم هستن پس کلاس نگهدارنده‌ی شناسه‌ی کاربران مریوطه دارای حجم بسیار کمی هست و فظای خیلی کمی رو از حافظه سرور میگیره ولی در عوض سیستم یک سیستم جاندار و منعطف میشه ... در آخر ذکر این نکته که این روش صرفا یک ایده بود که در زمان نوشتن این متن تحلیل شد و با زمان گذاشتن روی اون و ایده‌های مشابه میشه به نتایج عالی رسید . سیستم من از همچین مکانیزمی به صورت خیلی کاملتر و با جزئیات بالا استفاده میکنه 
‫۱۱ سال و ۹ ماه قبل، یکشنبه ۱۰ دی ۱۳۹۱، ساعت ۱۶:۵۶
نقش‌های کاربران در کش نگهداری نمیشه . اونها در کوکی‌ها ذخیره میشن برای بهینه کردن و کم کردن فشار از روی سیستم در ازای دسترسی هر با به پایگاه داده .  با مشخص کردن cacherolesincookie مربوط به rolemanager در web.config....
 

و اینکه یک سیستم مجوزهای 5000 کاربر یا حتی 5 میلیون کاربر رو در کش ذخیره کنه برای من هم نه حتی ناملموس بلکه یک اشتباه محض هست چون بعد از یک مدت با برخورد مدیران it سرور و suspend شدن مواجه میشیم ... کار CacheManager که ازش حرف زدم ذخیره کردن مجوز‌های اکشن هاست در حافظه که با هر بار Request برای اکشن دیگه نریم و مجوزهای اون رو از پایگاه داده بخونیم . شما بر فرض 100 اکشن مدیریتی دارید که هر کدوم هم 10 مجوز براشون مشخص شده در کل حساب بشه چیز زیادی نمیشه ولی در عوض سرعت  بالا رو در قبال نرفتن به پایگاه داده براتون به ارمغان میاره.

اینکه بیان کردید به ازای هر درخواست پایگاه داده مورد اشاره قرار بگیره  خیلی رو کارایی سیستم تاثیر منفی میزاره . به استناد گفته‌ی خودتون 5000 کاربر داریم که بر فرض در ثانیه در بدبینانه‌ترین حالت ممکن 100 درخواست ارسال میکنند . یعنی ما باید در هر ثانیه برای استخراج سطوح هر اکشن 100 بار به بانک اطلاعاتی مراجعه کنیم ؟ حال فرض کنید این درخواست‌ها در ثانیه 5000 تا و کاربران ما 5 میلیون تا باشن ... به نظرم این سیستم قبل از پیاده سازی شکستش قطعیه ...
‫۱۱ سال و ۹ ماه قبل، یکشنبه ۱۰ دی ۱۳۹۱، ساعت ۱۵:۳۷
جالبه . من در پروژه ای که در حال کار کردن روی اون هستم که یک CMF هست تقریبا همین کار رو انجام میدم . به این شکل که SecurityEngine این سیستم اکشن‌های مشخص شده که نیاز به سطح دسترسی دارن رو بر اساس یک attribute سفارشی شده استخراج میکنند به واسطه‌ی reflection و مدیران سیستم میتونن برای هر اکش role‌های دلخواه رو انتصاب بدن و سطوح هر اکشن رو توسط یک AuthorizeAttribute و با بازنویسی AuthorizeCore از پایگاه داده استخراج میکنم . هر کاربری که سطح دسترسی معین رو داشته باشه میتونه به اون اکشن دسترسی پیدا کنه ... البته پشت این SecurityEngine یک CashManagment هم قرار داره که از بار اظافه‌ی هر بار رفتن به پایگاه داده برای استخراج سطوح جلوگیری میکنه و این پروسه رو مدیریت میکنه
‫۱۱ سال و ۹ ماه قبل، شنبه ۹ دی ۱۳۹۱، ساعت ۱۵:۴۹
شما فیلتر Authorize رو میتونید برای یک اکشن هم در نظر بگیرید مثل مثال زیر . با این کار دیگه کل کنترلر به مجوزی که ذکر میکنید محدود نمیشه و فقط یک اکشن از اون محدود میشه...
using System;
using System.Web.Mvc;
  
namespace MyProject.Areas.Admin.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Admin/Home/
  
        public ActionResult Index()
        {
            return View();
        }

        [Authorize(Roles = "Administrators")]
        public ActionResult ViewProfile()
        {
            return View();
        }
    }
}