‫۸ سال و ۱ ماه قبل، پنجشنبه ۱۴ مرداد ۱۳۹۵، ساعت ۱۷:۱۶
در لحظه‌ای که این فایل‌ها دریافت میشوند، به این دلیل که در محیط خارج از VS این عملیات دریافت اتفاق میافتد، بنابراین در VS این فایل‌ها وجود ندارند، چون این فایل‌ها هنوز در فایل مدیریت منابع پروژه csproj نگاشته نشده‌اند. شما میتونید با include کردن این فایل‌ها در VS، در واقع آنها را به فایل csproj پروژه اضافه کنید که دیگر درون فولدرهای پروژه در VS نیز قابل مشاهده باشند.
‫۸ سال و ۳ ماه قبل، چهارشنبه ۲۶ خرداد ۱۳۹۵، ساعت ۱۶:۰۱
خیلی ممنون از مطلب مفیدتون.
روش token base authentication روش بسیار خوبی برای جایگزین شدن با روش‌های پیشین است، به خصوص در برنامه‌های تک صفحه ای. سوالی که برای بنده مطرح شد. بنده در پروژه ای token و اطلاعات تکمیلی کاربر را در Local Storage ذخیره میکنم. حال اینکه وقتی token به کاربر داده شد، اگر اطلاعات را کپی کنم و در مرورگر دیگری این اطلاعات را وارد کنم من را تایید صلاحیت میکنه. در صورتی که این نکته میتونه خیلی خطر ساز باشه، چون token که به کاربر اعطا میشه کلید refresh token را هم به همراه خودش داره و در نهایت کاربر تا هر زمانی که بخواد میتونه لاگین شده باقی بمونه. ممنون میشم اگر راه حلی پیشنهاد بدید به بنده.
یک سوالی در مورد عملکرد برنامه تلگرام هم دیده بودم، در تلگرام هم فکر میکنم از token استفاده میشه. اما خیلی جالبه که شما میتونید sessionهای فعالتون را ببینید که از چند دستگاه لاگین شده اید. آیا اگر اطلاعات token را در دیتابیس نگه دارم میتونم مثل تلگرام این وضعیت را هم کنترل کنم؟ مثلا آیا میتونم از سمت سرور یک token که تایید صلاحیت هست را expire کنم؟
‫۸ سال و ۴ ماه قبل، شنبه ۸ خرداد ۱۳۹۵، ساعت ۱۸:۵۷
با تشکر از مقاله خوبتون. خیلی کار را ساده میکنه فیلتری که نوشتید.
فقط من در هنگام استفاده از moment-jalali مشکلی برام به وجود اومد که برطرفش کردم. حس کردم شاید مشکل دوستان دیگر هم باشه. مشکل به این صورت بود که با اینکه من تمام کارهایی که در مقاله ذکر شده بود را انجام دادم، برای نمایش تاریخ فارسی میشد اما باز هم مینوشت x days ago به جای نمایش فارسی چند روز قبل. در مورد ماه و سال هم به همین صورت بود. من در خود وب سایت momentJs مطالعه کردم و متوجه شدم این کتابخانه درون خودش یک سری فایل برای زبان‌های گوناگون داره. بنده فایل اسکریپت زبان فارسی به همراه یک تکه کد که زبان فارسی را به عنوان زبان پیش فرض قرار میداد را اضافه کردم و مشکل حل شد.
    <!-- BEGIN MOMENT -->
    <script src="/bower_components/moment/moment.js"></script>
    <script src="/bower_components/moment/locale/fa.js"></script>
    <script src="/bower_components/moment-jalaali/build/moment-jalaali.js"></script>
    <script>
        moment.locale('fa');  // Set the default/global locale
        // ...
    </script>
    <!-- END MOMENT -->
و یک کار دیگه اینکه میشه این فیلتر را به هر صورتی خودتون ترجیح میدید Customize کنید. من از این فیلتر چندین نسخه تهییه کردم. به عنوان مثال یک فیلتر برای نمایش مدت زمان گذشته (مثلا چند ماه قبل)، یک فیلتر برای نمایش تاریخ به تنهایی و ...
یک نمونه از این پیاده سازی را آوردم امیدوارم مفید باشه.
app.filter('jalaliDateFromNow', function () {
    return function (inputDate) {
        var date = moment(inputDate);
        return date.fromNow();
    }
});

‫۸ سال و ۴ ماه قبل، دوشنبه ۲۷ اردیبهشت ۱۳۹۵، ساعت ۱۷:۰۵
در پاسخ به سوال شما باید عرض کنم که حرف شما کاملا درست است. به این دلیل که با هر فراخوانی از سمت کلاینت لیست permissionهای کاربر واکشی میشود. برای کم کردن این فراخوانی‌ها و واکشی‌ها ما چند راه در پیش رو خواهیم داشت.
1. استفاده از  caching اولین راه حل و ساده‌ترین راه حل هست. به این صورت که در هنگامی که کاربر وارد برنامه میشود تمامی دسترسی‌های او در cache ذخیره شود. برای این کار نیاز به نوشتن سرویسی برای مدیریت این حافظه است. فرض کنید در این حین دسترسی نقشی که کاربر در آن نقش است تغییر کند. بنابراین باید تمامی cache از نو ایجاد شود. توجه کنید که ما نمیتوانیم در معماری REST و Web API از Session استفاده کنیم. به این دلیل که فرایندها در این معماری Stateless هستند، به این معنی که چیزی را در خود نگه نمیدارند.
2. روش دیگر استفاده از Claim در Asp.Net Identity 2 است. در سیستم Identity جدید Asp شما قادر هستید چندین Claim برای کاربر تنظیم (set) کنید. برای این کار میتوانید مقاله ای در این زمینه را از سایت bitOfTech مطالعه کنید. در این مجموعه  مقالات تشریح شده است که چگونه میتوان Claim‌های شخصی سازی شده در سیستم تعریف کرد. در نهایت این Claimها hash شده و در Token کاربر ذخیره میشوند. توصیه میکنم اگر تعداد دسترسی‌های شما در هر نقش زیاد نیست میتوانید از این روش استفاده کنید. البته این را مد نظر داشته باشید در این مقالات نحوه Authorize کردن کاربر با آنچه ما در این مجموعه مقالات تشریح کردیم کمی متفاوت است. 
‫۸ سال و ۵ ماه قبل، سه‌شنبه ۱۴ اردیبهشت ۱۳۹۵، ساعت ۱۷:۱۷
خیلی ممنون از مطلب مفیدتون.
تنها یک سوال برای بنده پیش اومده. من توی سرویس‌های AngularJs متدهای get و post را به صورت زیر پیاده سازی میکنم:
    var _sampleGet = function (sampleModel) {
        return $http.get(serviceBase + '/api-path/', sampleModel);
    }

    return {
        sampleGet: _sampleGet,
    };
حال اینکه اصلا درون سرویس از q$ و defer و resolve استفاده نمیکنم. و در سمت کنترلر هم به صورت زیر از سرویس استفاده میکنم.
        myService.sampleGet(vm.formData).then(
            function (response) {
                vm.savedSuccessfully = true;
                // rest of process
            },
            function (response) {
                //handle errors
            });
میخواستم بدونم پیاده سازی من چه مشکلی را به وجود میاره؟
یک سوال دیگه این بود که برای فرایند هایی که امکان undo دارند (مثل ارسال ایمیل به یک فرد که سریعا یک پیغام برای undo کردن نمایش داده میشود) هم آیا از همین قابلیت‌ها استفاده میکنند؟
‫۸ سال و ۱۰ ماه قبل، یکشنبه ۱۵ آذر ۱۳۹۴، ساعت ۱۳:۴۷
خیلی ممنون از لینک مفیدتون. این نکته رو در ادامه مطلب شما بگم خوبه که Twitter وقتی از نسخه 2 به نسخه 3 بوت استرپ مهاجرت کرد، بعد از چند مدت ساپورتشو از Bootstrap 2 قطع کرد و دیگه ادامه نداد. اما در هنگام انتشار نسخه Bootstrap 4 alpha اعلام کرده که همچنان از Bootstrap 3 حمایت خواهد کرد. و این عمل هم ممکنه به دلیل محبوبیت نسخه 3 باشه که به نظر من شاید 70 درصد سایت‌هایی که در این چند سال در دنیا طراحی شده بر پایه Bootstrap بوده و واقعا نمیشه از این آمار بی‌شمار چشم پوشید. البته در Bootstrp 4 اتفاقاتی افتاده که شاید برای مهاجرت از 3 به 4 یک rework اساسی را متحمل شد، اما ارزشش را داره.