Forwarded from کدهک
در آخرین نسخه از پیش نمایش NET Core 3.0 وابستگی به کتابخانه ی JSON.NET حذف شده است و بجای آن از کتابخانه ی جدید System.Text.Json استفاده میشود.
کتابخانه ی Newton.Json سالهاست که برای پردازش اطلاعات JSON در دات نت مورد استفاده قرار میگیرد اما توسط تیمی خارج از مایکروسافت و به صورت متن باز توسعه داده میشود. چند ماه قبل این محصول زیر پرچم NET Foundation آمد و توسط مایکروسافت حمایت و پشتیبانی میشد اما در نسخه ی جدید قرار است به طور کلی از فریم ورک ASP NET Core حذف شود. این تصمیم در راستای یکپارچه کردن محیط ASP NET گرفته شده است. و قرار است تمام کتابخانه های Third-party این فریم ورک جایگزین یا حذف شوند.
کتابخانه ی جدید JSON در حدود 1.3 تا 5 برابر سریعتر عمل میکند.
در این مرحله هدف مایکروسافت این است که یک کتابخانه ی سبک و سریع برای کار با JSON در اختیار توسعه دهندگان قرار دهد و هنوز همه ی امکانات کتابخانه ی قدیمی در نسخه ی جدید پیاده نشده است. به همین دلیل امکان بازگشت به JSON NET از طریق اضافه کردن رفرنس و تزریق سرویس وجود دارد.
کتابخانه ی Newton.Json سالهاست که برای پردازش اطلاعات JSON در دات نت مورد استفاده قرار میگیرد اما توسط تیمی خارج از مایکروسافت و به صورت متن باز توسعه داده میشود. چند ماه قبل این محصول زیر پرچم NET Foundation آمد و توسط مایکروسافت حمایت و پشتیبانی میشد اما در نسخه ی جدید قرار است به طور کلی از فریم ورک ASP NET Core حذف شود. این تصمیم در راستای یکپارچه کردن محیط ASP NET گرفته شده است. و قرار است تمام کتابخانه های Third-party این فریم ورک جایگزین یا حذف شوند.
کتابخانه ی جدید JSON در حدود 1.3 تا 5 برابر سریعتر عمل میکند.
در این مرحله هدف مایکروسافت این است که یک کتابخانه ی سبک و سریع برای کار با JSON در اختیار توسعه دهندگان قرار دهد و هنوز همه ی امکانات کتابخانه ی قدیمی در نسخه ی جدید پیاده نشده است. به همین دلیل امکان بازگشت به JSON NET از طریق اضافه کردن رفرنس و تزریق سرویس وجود دارد.
❇️ چند مقاله خوب در مورد gRPC
🔰قبلا در مورد gRPC پست مفصلی گذاشتم. این روزا هم بحث gRPC خیلی ترند شده مخصوصا حالا که NET Core 3.0. هم داره حسابی ازش پشتیبانی میکنه و فیچر براش میده
پس اگه به این مبحث علاقه مندین، منابع زیر میتونه شروع خوبی باشه براتون
🔸 آشنایی اولیه با gRPC
------------------
🔹 Creating your first gRPC .NET Core Client and Server App using Visual Studio or Visual Studio Code
👆 Github Repository
------------------
🔹 ASP.NET Core and gRPC
🔸 Working with gRPC in ASP.NET Core
🔹 Dissecting a Client-Server Application built with .NET Core 3 Preview 1 and gRPC
🔸 C# and gRPC Part One
------------------
🔹 Security Experiments with gRPC and ASP.NET Core 3.0
🔸 Running Razor Pages and A gRPC Service in a Single ASP.NET Core Application
🔹 gRPC Bi-Directional Streaming With Razor Pages And A Hosted Service gRPC Client
👆 Github Repository
------------------
🔹 An Early Look at gRPC and ASP.NET Core 3.0 (Creating an ASP.NET Core 3.0 gRPC Client and Server)
👆 Github Repository
________________
@IranAspMvc
🔰قبلا در مورد gRPC پست مفصلی گذاشتم. این روزا هم بحث gRPC خیلی ترند شده مخصوصا حالا که NET Core 3.0. هم داره حسابی ازش پشتیبانی میکنه و فیچر براش میده
پس اگه به این مبحث علاقه مندین، منابع زیر میتونه شروع خوبی باشه براتون
🔸 آشنایی اولیه با gRPC
------------------
🔹 Creating your first gRPC .NET Core Client and Server App using Visual Studio or Visual Studio Code
👆 Github Repository
------------------
🔹 ASP.NET Core and gRPC
🔸 Working with gRPC in ASP.NET Core
🔹 Dissecting a Client-Server Application built with .NET Core 3 Preview 1 and gRPC
🔸 C# and gRPC Part One
------------------
🔹 Security Experiments with gRPC and ASP.NET Core 3.0
🔸 Running Razor Pages and A gRPC Service in a Single ASP.NET Core Application
🔹 gRPC Bi-Directional Streaming With Razor Pages And A Hosted Service gRPC Client
👆 Github Repository
------------------
🔹 An Early Look at gRPC and ASP.NET Core 3.0 (Creating an ASP.NET Core 3.0 gRPC Client and Server)
👆 Github Repository
________________
@IranAspMvc
Medium
Creating your first gRPC .NET Core Client and Server App using Visual Studio or Visual Studio Code
This is a quick setup guide for creating and running .NET core apps that use the gRPC framework for communication. This guide includes the…
❇️ اگه میخواین مفهوم Hash و Salt رو درک کنین
فیلم زیر از جادی خیلی باحال توضیحش میده
🔰 نقل قول از جادی :
"به نظر من، هشها از قشنگیهای دنیای کامپیوتر و برنامه نویسی. فانکشنهایی که میتونن اطلاعات رو به ترکیبی از بیت های دیگه با طول ثابت تبدیل کنن و نتیجه شون هم همیشه برای ورودی ثابت، ثابته. این ایده درخشان منتیج به نتایج خیلی جالبی هم شده. مثلا فرض کنین می خواین بدونین آیا فایلی که دانلود کردین سالمه یا نه. یا می خواین کلی دیتا رو جایی بریزین و سریع پیداشون کنین. یا از اون جالبتر، می خواین به یکی پشت تلفن بگین «یه عدد در نظر بگیر» و بعد عدد رو حدس بزنین و مطمئن باشین که تقلبی نمی تونه اتفاق بیافته یا حتی رمزارز بسازین. همه اینجاها، هش کار گشا است فهمیدنش برای یک برنامه نویس خوب واجبه. "
1️⃣ https://www.aparat.com/v/1YjmV/
2️⃣ https://www.aparat.com/v/PmYpu/
3️⃣ https://www.aparat.com/v/Yg02q/
________________
@IranAspMvc
فیلم زیر از جادی خیلی باحال توضیحش میده
🔰 نقل قول از جادی :
"به نظر من، هشها از قشنگیهای دنیای کامپیوتر و برنامه نویسی. فانکشنهایی که میتونن اطلاعات رو به ترکیبی از بیت های دیگه با طول ثابت تبدیل کنن و نتیجه شون هم همیشه برای ورودی ثابت، ثابته. این ایده درخشان منتیج به نتایج خیلی جالبی هم شده. مثلا فرض کنین می خواین بدونین آیا فایلی که دانلود کردین سالمه یا نه. یا می خواین کلی دیتا رو جایی بریزین و سریع پیداشون کنین. یا از اون جالبتر، می خواین به یکی پشت تلفن بگین «یه عدد در نظر بگیر» و بعد عدد رو حدس بزنین و مطمئن باشین که تقلبی نمی تونه اتفاق بیافته یا حتی رمزارز بسازین. همه اینجاها، هش کار گشا است فهمیدنش برای یک برنامه نویس خوب واجبه. "
1️⃣ https://www.aparat.com/v/1YjmV/
2️⃣ https://www.aparat.com/v/PmYpu/
3️⃣ https://www.aparat.com/v/Yg02q/
________________
@IranAspMvc
آپارات - سرویس اشتراک ویدیو
هش (یک از سه) - درک مفهوم
هش ها مفهوم مهمی در برنامه نویسی هستن و منم دوستشون دارم. پس بیاین معرفی شون کنیم، بگیم چی هستن و به چه دردی می خورن.
✅ افزایش امنیت JWT توسط Refresh Token در ASP NET Core
وقتی از Jwt واسه احراز هویت برنامه تون استفاده میکنین سوالی که پیش میاد اینه که زمانی که توکن کاربر Expire (منقضی) شد چی میشه؟!
1️⃣ آیا باید کاربر رو Logout کنیم و ازش بخوایم دوباره لاگین کنه؟ اگه وسط یه عملیات مهم باشه چی؟! همه چی از دست میره که! 🤔
2️⃣ شایدم باید مدت زمان توکن رو زیاد کنیم، مثلا 1 سال !! تا دیر به دیر منقضی بشه. که این عملا بدترین راه حل ممکن هست چرا که اگه توکن به سرقت بره، هکر تا یک سال میتونه هر کاری میخواد با توکن طرف (هویتش) بکنه 😕
3️⃣ یا اینکه یوزر و پسورد طرف رو بگیریم سمت خودمون ذخیره کنیم (مثلا توی localStorage توی وب) و هر موقع توکن اش منقضی شد، زیر پوستی خودمون یوزر پس طرف رو بفرستیم و توکن جدید بگیریم؟! اینم که ضعف امنیتی داره چون یوزر و پس طرف در معرض خطره 🤨
🔰پس راه حل چیه؟
🔸راه حل استفاده از Refresh Token هست. به این صورت که وقتی طرف برای بار اول میخواد احراز هویت بشه، یوزر و پس اش رو به ما میده و ما 2تا توکن بهش میدیم. یکی access_token که همون Jwt هست و دیگری یک refresh_token که عملا یه متن رندم (مثلا یه Guid) هست
این رفرش توکن (guid) توی دیتابیس ما ذخیره شده که به ازای چه کاربری و چه access_token ایی هست، در نتیجه وقتی طرف access_token اش منقضی میشه به جای اینکه لازم باشه 2مرتبه یوزر و پس برای ما بفرسته، با فرستادن refresh_token میتونه یه توکن جدید (شامل یه access_token جدید + یه refresh_token جدید) دریافت کنه که اینطوره ضریب امنیت بالا میره (چون یوزر پس اشو نمیفرسته)
🔹ضمن اینکه هر بار گرفتن access_token توسط refresh_token ، اون access_token قبلی رو غیرفعال میکنه، پس اگر access_token به سرقت بره، با Revoke کردنش توسط refresh_token، غیر قابل استفاده میشه و باز هم ضریب امنیت بالاتر میره
🔸این عملیات هم سمت فرانت یا کلاینت باید پشت پرده و زیر پوستی انجام بشه تا کاربر اصلا متوجه logout و login شدن مجددش نشه. مثلا توی Angular توسط HttpIncerceptor میتونیم قبل از Api Call ها چک کنیم که اگر access_token مون منقضی شده، ابتدا توسط refresh_token، یه توکن جدید بگیریم و بعد Api Call مون رو انجام بدیم
🔰خیلی از دوستان هم میپرسن مدت زمان انقضای access_token و refresh_token چقدر باید باشه؟
🔹هیچ بایدی وجود نداره و همه جوره زمان میدن بهش. درکل چیزی که مهمه اینه که مدت زمان access_token باید کم باشه و مدت زمان refresh_token بیشتر.
مثلا شخصا ترجیح میدم مدت زمان access_token بین 5 دقیقه تا نهایتا 1 ساعت باشه
و مدت زمان refresh_token بین 1 هفته تا نهایتا 1 ماه باشه
🔸هرچی کمتر باشه ضریب امنیت بیشتر میشه ولی تعداد ریکوئستا به سرور هم بیشتر میشه
البته یه مشکلی که هنگام استفاده از RefreshToken پیش میاد اینه که اگه کاربر توی مدت زمان refresh_token با سایت هیچ تعاملی نداشته باشه که توکن جدید دریافت کنه، مثلا بیشتر از 1 ماه به سایت ما سر نزنه، بعدش کلا logout میشه و باید دوباره توسط User و Pass لاگین کنه (که خب به نظرم منطقی هم هست)
❇️ از بین مقاله های زیادی که برای RefreshToken در ASP Core هست؛ این2تا رو براتون گلچین کردم که خیلی خوب توضیح دادند و اصولی پیاده سازی کردند
1️⃣ https://bit.ly/2ZZ2JwT
2️⃣ https://bit.ly/2ZWTk9o
_____________
@IranAspMvc
وقتی از Jwt واسه احراز هویت برنامه تون استفاده میکنین سوالی که پیش میاد اینه که زمانی که توکن کاربر Expire (منقضی) شد چی میشه؟!
1️⃣ آیا باید کاربر رو Logout کنیم و ازش بخوایم دوباره لاگین کنه؟ اگه وسط یه عملیات مهم باشه چی؟! همه چی از دست میره که! 🤔
2️⃣ شایدم باید مدت زمان توکن رو زیاد کنیم، مثلا 1 سال !! تا دیر به دیر منقضی بشه. که این عملا بدترین راه حل ممکن هست چرا که اگه توکن به سرقت بره، هکر تا یک سال میتونه هر کاری میخواد با توکن طرف (هویتش) بکنه 😕
3️⃣ یا اینکه یوزر و پسورد طرف رو بگیریم سمت خودمون ذخیره کنیم (مثلا توی localStorage توی وب) و هر موقع توکن اش منقضی شد، زیر پوستی خودمون یوزر پس طرف رو بفرستیم و توکن جدید بگیریم؟! اینم که ضعف امنیتی داره چون یوزر و پس طرف در معرض خطره 🤨
🔰پس راه حل چیه؟
🔸راه حل استفاده از Refresh Token هست. به این صورت که وقتی طرف برای بار اول میخواد احراز هویت بشه، یوزر و پس اش رو به ما میده و ما 2تا توکن بهش میدیم. یکی access_token که همون Jwt هست و دیگری یک refresh_token که عملا یه متن رندم (مثلا یه Guid) هست
این رفرش توکن (guid) توی دیتابیس ما ذخیره شده که به ازای چه کاربری و چه access_token ایی هست، در نتیجه وقتی طرف access_token اش منقضی میشه به جای اینکه لازم باشه 2مرتبه یوزر و پس برای ما بفرسته، با فرستادن refresh_token میتونه یه توکن جدید (شامل یه access_token جدید + یه refresh_token جدید) دریافت کنه که اینطوره ضریب امنیت بالا میره (چون یوزر پس اشو نمیفرسته)
🔹ضمن اینکه هر بار گرفتن access_token توسط refresh_token ، اون access_token قبلی رو غیرفعال میکنه، پس اگر access_token به سرقت بره، با Revoke کردنش توسط refresh_token، غیر قابل استفاده میشه و باز هم ضریب امنیت بالاتر میره
🔸این عملیات هم سمت فرانت یا کلاینت باید پشت پرده و زیر پوستی انجام بشه تا کاربر اصلا متوجه logout و login شدن مجددش نشه. مثلا توی Angular توسط HttpIncerceptor میتونیم قبل از Api Call ها چک کنیم که اگر access_token مون منقضی شده، ابتدا توسط refresh_token، یه توکن جدید بگیریم و بعد Api Call مون رو انجام بدیم
🔰خیلی از دوستان هم میپرسن مدت زمان انقضای access_token و refresh_token چقدر باید باشه؟
🔹هیچ بایدی وجود نداره و همه جوره زمان میدن بهش. درکل چیزی که مهمه اینه که مدت زمان access_token باید کم باشه و مدت زمان refresh_token بیشتر.
مثلا شخصا ترجیح میدم مدت زمان access_token بین 5 دقیقه تا نهایتا 1 ساعت باشه
و مدت زمان refresh_token بین 1 هفته تا نهایتا 1 ماه باشه
🔸هرچی کمتر باشه ضریب امنیت بیشتر میشه ولی تعداد ریکوئستا به سرور هم بیشتر میشه
البته یه مشکلی که هنگام استفاده از RefreshToken پیش میاد اینه که اگه کاربر توی مدت زمان refresh_token با سایت هیچ تعاملی نداشته باشه که توکن جدید دریافت کنه، مثلا بیشتر از 1 ماه به سایت ما سر نزنه، بعدش کلا logout میشه و باید دوباره توسط User و Pass لاگین کنه (که خب به نظرم منطقی هم هست)
❇️ از بین مقاله های زیادی که برای RefreshToken در ASP Core هست؛ این2تا رو براتون گلچین کردم که خیلی خوب توضیح دادند و اصولی پیاده سازی کردند
1️⃣ https://bit.ly/2ZZ2JwT
2️⃣ https://bit.ly/2ZWTk9o
_____________
@IranAspMvc
Forwarded from کدهک
در واقع LLVM مجموعه ای از ماژولها و ابزار است که عملیات کامپایل کردن سورس کد به زبان ماشین را آسان میکند.
این پروژه در سال 2000 به عنوان یک تحقیق دانشجویی شروع شد و اکنون به عنوان ابزار اصلی بسیاری از زبانهای برنامه نویسی مورد استفاده قرار میگیرد. سازنده ی اصلی آن آقای کریس لتنر حالا در استخدام اپل است و روی زبانهای برنامه نویسی این شرکت کار میکند.
در گذشته وقتی میخواستید یک زبان برنامه نویسی جدید بسازید باید همه ی فرآیند خوانش کد و تبدیل آن به زبان ماشین را خودتان پیاده میکردید. مشکل این است که پردازنده های سخت افزاری متعددی در بازار وجود دارد و ساز و کار x86 با ARM و PowerPC و ... متفاوت است.
شما باید کامپایلری بسازید که قادر باشد از روی سورس برنامه نوشته شده توسط برنامه نویس کد ماشین برای انواع پردازنده تولید کند. در غیر این صورت عملا محدودیت های زیادی در استفاده از زبان برنامه نویسی بوجود می آید.
این مشکلی است که LLVM به خوبی حل می کند. LLVM مجموعه ای از ابزار با API های ماژولار در اختیار شما قرار میدهد تا بتوانید سورس کد را به زبانی میانی یا Intermediate Representation تبدیل کنید. فقط کافی است کدهای مربوط به Front-End را بنویسید و به LLVM ارسال کنید.
این Front-End ارتباطی با جاوا اسکریپت ندارد! بلکه بخشی از کامپایلر است که وظیفه ی Parse کردن و تشخیص خطاهای Syntax را به عهده دارد. بعد از اینکه کد شما به IR تبدیل شد LLVM می تواند آن را برای انواع مختلف سخت افزار آماده کند و کد ماشین مورد نیاز را تولید کند.
ابزار LLVM کمک کرده فرآیند طراحی زبان های برنامه نویسی جدید آسانتر شود و در نتیجه زبانهایی مثل Kotlin و Rust و Swift در کوتاهترین زمان جای خود را بین برنامه نویسان باز کرده اند.
این پروژه در سال 2000 به عنوان یک تحقیق دانشجویی شروع شد و اکنون به عنوان ابزار اصلی بسیاری از زبانهای برنامه نویسی مورد استفاده قرار میگیرد. سازنده ی اصلی آن آقای کریس لتنر حالا در استخدام اپل است و روی زبانهای برنامه نویسی این شرکت کار میکند.
در گذشته وقتی میخواستید یک زبان برنامه نویسی جدید بسازید باید همه ی فرآیند خوانش کد و تبدیل آن به زبان ماشین را خودتان پیاده میکردید. مشکل این است که پردازنده های سخت افزاری متعددی در بازار وجود دارد و ساز و کار x86 با ARM و PowerPC و ... متفاوت است.
شما باید کامپایلری بسازید که قادر باشد از روی سورس برنامه نوشته شده توسط برنامه نویس کد ماشین برای انواع پردازنده تولید کند. در غیر این صورت عملا محدودیت های زیادی در استفاده از زبان برنامه نویسی بوجود می آید.
این مشکلی است که LLVM به خوبی حل می کند. LLVM مجموعه ای از ابزار با API های ماژولار در اختیار شما قرار میدهد تا بتوانید سورس کد را به زبانی میانی یا Intermediate Representation تبدیل کنید. فقط کافی است کدهای مربوط به Front-End را بنویسید و به LLVM ارسال کنید.
این Front-End ارتباطی با جاوا اسکریپت ندارد! بلکه بخشی از کامپایلر است که وظیفه ی Parse کردن و تشخیص خطاهای Syntax را به عهده دارد. بعد از اینکه کد شما به IR تبدیل شد LLVM می تواند آن را برای انواع مختلف سخت افزار آماده کند و کد ماشین مورد نیاز را تولید کند.
ابزار LLVM کمک کرده فرآیند طراحی زبان های برنامه نویسی جدید آسانتر شود و در نتیجه زبانهایی مثل Kotlin و Rust و Swift در کوتاهترین زمان جای خود را بین برنامه نویسان باز کرده اند.
ازین پس فقط از طریق خود کانال میتونین عضو گروه بشین (به جهت جلوگیری از ربات های اسپمر)
کافیه وارد کانال بشین و پایین صفحه روی دکمه Discuss بزنید
لینک کانال :
@IranAspMvc
اگه این گزینه رو مشاهده نمیکنین با اپدیت کردن تلگرامتون مشکل برطرف میشه
کافیه وارد کانال بشین و پایین صفحه روی دکمه Discuss بزنید
لینک کانال :
@IranAspMvc
اگه این گزینه رو مشاهده نمیکنین با اپدیت کردن تلگرامتون مشکل برطرف میشه
محصولی مانند BMW واقعا چگونه در ذهن ما به عنوان یک محصول با کیفیت شکل گرفته است؟ آیا ما تخصص بررسی عملکرد موتور و گیربکس آن را داریم؟ آیا مقایسهای فنی روی آن انجام دادهایم تا بفهمیم ماشین BMW یک محصول با کیفیت است؟
در حقیقت یک محصول را مفهومی به نام «نقاط تماس» یا Touch Points تعریف میکند. نقاط تماس مجموعه لحظاتی است که مشتری محصول را تجربه میکند. یک نقطه تماس میتواند لحظاتی باشد که مشتری با آن کار میکند، یا لحظاتی که مشتری پوستر محصول را میبیند و یا زمانی که صدای تیم پشتیبانی شما را از پشت تلفن میشوند.
ما برنامه نویسها عادت کردیم برنامه بنویسیم! و البته دوست داریم مشتریان برای این عادت ما ارزش قائل شوند و برای آن پول پرداخت کنند. اما حقیقت این است که مشتریان چیزی از زیبایی معماری نرمافزار ما نمیبینند همانطور که چیزی از جزئیات گیربکس یک BMW نمیدانند.
در حقیقت بهترین معماری و برنامهنویسی زمانی اتفاق میافتد که آنقدر همه چیز درست کار کند که مشتری اصلا نفهمد برنامه نویسی انجام شده، همانطور که یک گیربکس عالی گیربکسی است که مشتری هیچوقت متوجه وجودش نشود و فقط مطمئن باشد که دنده به درستی عمل میکند.
بنابر این در اکثر مواقع توضیح اینکه برنامه چقدر خوب نوشته شده ارزشی برای مشتریان ندارد.
مقاله زیر به طور خلاصه مفهوم Touch Point و نقش آن در تعریف محصولات نرمافزاری را شرح دادهاست.
http://mehrandvd.me/2016/10/02/touch-point-real-percepction-product/
#مهران_داودی
لینکدین:
https://ir.linkedin.com/in/mehrandvd
کانال تلگرام:
@SoftwarePhilosophy
___
در حقیقت یک محصول را مفهومی به نام «نقاط تماس» یا Touch Points تعریف میکند. نقاط تماس مجموعه لحظاتی است که مشتری محصول را تجربه میکند. یک نقطه تماس میتواند لحظاتی باشد که مشتری با آن کار میکند، یا لحظاتی که مشتری پوستر محصول را میبیند و یا زمانی که صدای تیم پشتیبانی شما را از پشت تلفن میشوند.
ما برنامه نویسها عادت کردیم برنامه بنویسیم! و البته دوست داریم مشتریان برای این عادت ما ارزش قائل شوند و برای آن پول پرداخت کنند. اما حقیقت این است که مشتریان چیزی از زیبایی معماری نرمافزار ما نمیبینند همانطور که چیزی از جزئیات گیربکس یک BMW نمیدانند.
در حقیقت بهترین معماری و برنامهنویسی زمانی اتفاق میافتد که آنقدر همه چیز درست کار کند که مشتری اصلا نفهمد برنامه نویسی انجام شده، همانطور که یک گیربکس عالی گیربکسی است که مشتری هیچوقت متوجه وجودش نشود و فقط مطمئن باشد که دنده به درستی عمل میکند.
بنابر این در اکثر مواقع توضیح اینکه برنامه چقدر خوب نوشته شده ارزشی برای مشتریان ندارد.
مقاله زیر به طور خلاصه مفهوم Touch Point و نقش آن در تعریف محصولات نرمافزاری را شرح دادهاست.
http://mehrandvd.me/2016/10/02/touch-point-real-percepction-product/
#مهران_داودی
لینکدین:
https://ir.linkedin.com/in/mehrandvd
کانال تلگرام:
@SoftwarePhilosophy
___
Dot Philosophy
Touch Point: The Real Percepction of a Product - Dot Philosophy
Recently I've participated in a great workshop about Service Design. It was a totally new concept to me. The course was designed surprisingly great by Joannes Vandermeulen from Namahn. If you ask me about the most important keyword I've learned in the course…
Forwarded from Software Philosophy
کانالهای فارسی خود را دوطرفه کنید!
مدتی قبل به عنوان یک پروژه دستگرمی! یک کار جالب کردیم.
چند تا از برنامهنویسان حرفهای کانال «فلسفه نرمافزار» و طراحان حرفهای کانال «فلسفه دیزاین» طی یک هفته دست به کار شدیم و یک بات تلگرام درست کردیم که امکان «کامنتگذاری فارسی» زیر پستها را به کانال تلگرام اضافه کنیم.
پروژه بسیار جذابی بود و تصمیم گرفتیم که با شما هم به اشتراک بگذاریم.
از جذابیتهای فنی این بات:
۱. کل تیمی که یک هفته روی این بات کار کردند کاملا ریموت بوده و همدیگر را ندیدهاند!
۲. همه این سیستم روی Azure ریلیز شده و به شدت آماده گسترش (Scale شدن) است. اگر کانالهای زیادی شروع به استفاده از این بات کنند، گزارشهایی را از روش گسترش این سرویس روی Azure، همینجا با شما به اشتراک میگذاریم.
۳. این بات از ویژگی جدید LoginURL که جدیدا به تلگرام اضافه شده استفاده میکند. این ویژگی به کاربران این امکان را میدهد که وقتی از طریق تلگرام یک لینک را باز میکنند، بصورت اتوماتیک Login شوند.
ناگفته نماند خود تلگرام هم یک بات برای کامنتگذاری اضافه کرده که برای زبان فارسی اصلا خوب کار نمیکند. همین موضوع انگیزهای برای ما شد که این بات را ساخته و تجربه خوشآیندی را از کامنت گذاشتن به زبان فارسی به کانالهای تلگرام بیاوریم.
برای اضافه شدن این امکان، کافیست بات @CommentFarsiBot را به کانال خود اضافه کنید (به عنوان ادمین).
حالا دیگه ما هم صدای شما را میشنویم!
کانال فلسفه نرمافزار: @SoftwarePhilosophy
کانال فلسفه دیزاین: @Dexign
ــــــــ
مدتی قبل به عنوان یک پروژه دستگرمی! یک کار جالب کردیم.
چند تا از برنامهنویسان حرفهای کانال «فلسفه نرمافزار» و طراحان حرفهای کانال «فلسفه دیزاین» طی یک هفته دست به کار شدیم و یک بات تلگرام درست کردیم که امکان «کامنتگذاری فارسی» زیر پستها را به کانال تلگرام اضافه کنیم.
پروژه بسیار جذابی بود و تصمیم گرفتیم که با شما هم به اشتراک بگذاریم.
از جذابیتهای فنی این بات:
۱. کل تیمی که یک هفته روی این بات کار کردند کاملا ریموت بوده و همدیگر را ندیدهاند!
۲. همه این سیستم روی Azure ریلیز شده و به شدت آماده گسترش (Scale شدن) است. اگر کانالهای زیادی شروع به استفاده از این بات کنند، گزارشهایی را از روش گسترش این سرویس روی Azure، همینجا با شما به اشتراک میگذاریم.
۳. این بات از ویژگی جدید LoginURL که جدیدا به تلگرام اضافه شده استفاده میکند. این ویژگی به کاربران این امکان را میدهد که وقتی از طریق تلگرام یک لینک را باز میکنند، بصورت اتوماتیک Login شوند.
ناگفته نماند خود تلگرام هم یک بات برای کامنتگذاری اضافه کرده که برای زبان فارسی اصلا خوب کار نمیکند. همین موضوع انگیزهای برای ما شد که این بات را ساخته و تجربه خوشآیندی را از کامنت گذاشتن به زبان فارسی به کانالهای تلگرام بیاوریم.
برای اضافه شدن این امکان، کافیست بات @CommentFarsiBot را به کانال خود اضافه کنید (به عنوان ادمین).
حالا دیگه ما هم صدای شما را میشنویم!
کانال فلسفه نرمافزار: @SoftwarePhilosophy
کانال فلسفه دیزاین: @Dexign
ــــــــ
🔴 سایت محبوب گیتهاب در حال محدود کردن دسترسی ایرانیان میباشد
سریعا از مخزن خود نسخه پشتیبان تهیه کنید و بدنبال سرویس جایگزین باشید
#خبر #نرم_افزار
@DonyaeTablighat
سریعا از مخزن خود نسخه پشتیبان تهیه کنید و بدنبال سرویس جایگزین باشید
#خبر #نرم_افزار
@DonyaeTablighat
امروز مایکروسافت اعلام کرد که شاخه ی اصلی سورس دات نت به 5.0 تغییر نام داده شده و توسعه ی نسخه ی بعدی دات نت شروع شده است.
چند ماه پیش در کنفرانس بیلد اعلام شد که NET Core با نسخه ی 4.0 نخواهیم داشت تا با نسخه های قدیمی تداخل پیش نیاد. همچنین در نسخه ی 5.0 دات نت Core و نسخه های قبلی دات نت ادغام میشوند.
چند ماه پیش در کنفرانس بیلد اعلام شد که NET Core با نسخه ی 4.0 نخواهیم داشت تا با نسخه های قدیمی تداخل پیش نیاد. همچنین در نسخه ی 5.0 دات نت Core و نسخه های قبلی دات نت ادغام میشوند.
Forwarded from Software Philosophy
خرمشهر را اسکات هانسلمن آزاد کرد!!
چند روزی بود که دنیای نرمافزار اوپن سورس ایران دچار کابوس شده بود! شهر آرمانی دنیای اوپنسورس، جایی که همه آزادانه سورسهای خود را به اشتراک میگذارند، یعنی GitHub به علت تحریمها برای ایرانیان محدود شده بود.
خرمشهر در فارسی یعنی شهری که همه در اون خوش و خرم هستند و در ادبیات تاریخی ما نماد جایی هست که به زور میخواستند بگیرنش، بی شباهت به گیتهاب نیست!
خبر جذذاب (با تو تا ذ!) این بود که اسکات هانسلمن امروز فارسی توییت کرد «خسته نباشید!» اما چه ربطی داره!؟
ظاهرا تعداد زیادی برنامهنویس ایرانی که در توییتر با اسکات هانسلمن در این مورد صحبت کردن باعث شدن که صحبتی بین اسکات و «نات فریمن» مدیر عامل گیتهاب شکل بگیره و در حال حاضر این امکان فراهم شده که برنامهنویسانی که ریپازیتوری خصوصی داشتن بتونن پابلیکش کنن و به کدهاشون دسترسی پیدا کنن.
نات فریمن در توییتی توضیح داده که: «فعلا تونستیم کاری کنیم که افراد بتونن ریپازیتوریهاشون رو پابلیک کنن تا بهش دسترسی داشته باشن، طبق فهم ما از قانون فعلا نمیتونیم کار بیشتری کنیم...» و در توییتی دیگه نوشته: «ما این کار رو نکردیم چون میخواستیم، این کار رو کردیم چون مجبور شدیم...»
و در آخر اینکه لامصب اسکات هانسلمن، فارسی هم میخواد صحبت کنه فلوئنت صحبت میکنه!
لینک توییتهای ذکر شده:
https://twitter.com/shanselman/status/1155240674301624321
https://twitter.com/natfriedman/status/1155311124687945728
https://twitter.com/natfriedman/status/1155311125967171585
https://twitter.com/mehrandvd/status/1155385194657935360
#مهران_داودی (http://ow.ly/GwIl309lFEm)
کانال تلگرام:
@SoftwarePhilosophy
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، دکمه پایین را بزنید. 👇👇
چند روزی بود که دنیای نرمافزار اوپن سورس ایران دچار کابوس شده بود! شهر آرمانی دنیای اوپنسورس، جایی که همه آزادانه سورسهای خود را به اشتراک میگذارند، یعنی GitHub به علت تحریمها برای ایرانیان محدود شده بود.
خرمشهر در فارسی یعنی شهری که همه در اون خوش و خرم هستند و در ادبیات تاریخی ما نماد جایی هست که به زور میخواستند بگیرنش، بی شباهت به گیتهاب نیست!
خبر جذذاب (با تو تا ذ!) این بود که اسکات هانسلمن امروز فارسی توییت کرد «خسته نباشید!» اما چه ربطی داره!؟
ظاهرا تعداد زیادی برنامهنویس ایرانی که در توییتر با اسکات هانسلمن در این مورد صحبت کردن باعث شدن که صحبتی بین اسکات و «نات فریمن» مدیر عامل گیتهاب شکل بگیره و در حال حاضر این امکان فراهم شده که برنامهنویسانی که ریپازیتوری خصوصی داشتن بتونن پابلیکش کنن و به کدهاشون دسترسی پیدا کنن.
نات فریمن در توییتی توضیح داده که: «فعلا تونستیم کاری کنیم که افراد بتونن ریپازیتوریهاشون رو پابلیک کنن تا بهش دسترسی داشته باشن، طبق فهم ما از قانون فعلا نمیتونیم کار بیشتری کنیم...» و در توییتی دیگه نوشته: «ما این کار رو نکردیم چون میخواستیم، این کار رو کردیم چون مجبور شدیم...»
و در آخر اینکه لامصب اسکات هانسلمن، فارسی هم میخواد صحبت کنه فلوئنت صحبت میکنه!
لینک توییتهای ذکر شده:
https://twitter.com/shanselman/status/1155240674301624321
https://twitter.com/natfriedman/status/1155311124687945728
https://twitter.com/natfriedman/status/1155311125967171585
https://twitter.com/mehrandvd/status/1155385194657935360
#مهران_داودی (http://ow.ly/GwIl309lFEm)
کانال تلگرام:
@SoftwarePhilosophy
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، دکمه پایین را بزنید. 👇👇
X (formerly Twitter)
Scott Hanselman 🌮 (@shanselman) on X
خسته نباشید
🔶 دنیای «بازی» که به روی ما ایرانیا «بسته» شد !
خب همونطور که قبلا هشدار داده بودیم. بلاخره گیتهاب حرفشو عملی کرد و تحریم اکانت هایی ایرانی رو عملی کرد.
اگه فقط ریپو های عمومی (public) داشتید که جای نگرانی نیست و بعید هم میدونم در آینده حتی مشکلی براشون پیش بیاد. اما اگه ریپو های خصوصی (private) داشتین متاسفانه دیگه بسته شده و در دسترس نیست.
همچنین صفحات github Pages هم بسته شده بود حتی برای پروژه های عمومی که این تصمیم گیتهاب واقعا غیر منطقی بود
خوشبختانه امروز گیتهاب دسترسی صفحات github Pages رو باز کرد و امکان تبدیل ریپو های خصوصی به عمومی رو فراهم کرد و در نتیجه میتونین سورس کد هاتون رو نجات بدین.
🔷 و اما حالا باید چیکار کنیم؟
در کل اینکه نگران نباشید به لطف ورژن کنترل Git تمام تاریخچه Commit ها و Branch ها و ... رو میشه زنده کرد (به غیر از Issue ها و تاریخچه Pull Request ها و Watch ها و... یه سری چیزا که اختصاصا مال گیتهابه ، نه گیت)
0️⃣ راه حل های بی فایده :
بدیهیه که استفاده از قند شکن و اینا تاثیری نداره پس اینقدر نپرسین. ضمنا برای اینکه اکانتتون رفع تحریم بشه، به پاسپورت غیر ایرانی نیاز دارین و راه تقلبی هم وجود نداره، پس هیچی.
1️⃣ مهاجرت نکنیم :
گیتهاب غیر از اینکه بزرگترین جامعه برنامه نویسای دنیاست، نشون دهنده هویت و سابقه یه برنامه نویس هم هست پس قاعدتا نمیشه و نباید دروشو خط کشید
بنابراین اگه صرفا از ریپو های پابلیک استفاده میکنین مشکلی نیست و نیاز به مهاجرت ندارین.
فقط کافیه ضربدر اون پیغام زرد رنگ رو مخی رو بزنین تا بره 😕
2️⃣ مهاجرت به GitLab :
گیت لب که خیلی وقت پیش ایرانی ها رو تحریم کرد ولی بازم صد رحمت بهش که به Block کردن IP ها بسنده کرد 😒
با فرض داشتن قند شکن یکی از گزینه ها انتقال به گیت لب هست ولی احتمالش هست که در آینده ای نه چندان دور مشکلات تحریم رو پیدا کنه.
اطلاعات بیشتر :
http://bit.ly/2K8CdLn
3️⃣ مهاجرت به Azure DevOps :
سرویس Azure DevOps ماکروسافت استثناعا تا الان هیچ تحریمی نگذاشته و محدودیت ریپو های خصوصیش تا 5 نفره که به نسبت بقیه گزینه بهتریه
ولی بازم احتمالش هست که در آینده ای نه چندان دور مشکلات تحریم رو پیدا کنه
4️⃣ گیت سرویس شخصی :
سایت گیت لب یه نسخه Community Edition (یا همون CE) داره که رایگان و قابل دانلوده و این امکان رو به شما میده که سایت گیت لب رو (با یه سری امکانات محدود) روی سرور خودتون نصب کنین.
خیلی هم سادس فقط به یه سرور لینوکسی نیاز داره (البته با داکر روی ویندوز هم میاد)
به غیر از گیت لب CE، پروژه های دیگه ای مانند Gitea و Gogs هم هستند
درکل این روش، کم ریسک ترین گزینه برای ریپو های خصوصی هست
____________
@IranAspMvc
خب همونطور که قبلا هشدار داده بودیم. بلاخره گیتهاب حرفشو عملی کرد و تحریم اکانت هایی ایرانی رو عملی کرد.
اگه فقط ریپو های عمومی (public) داشتید که جای نگرانی نیست و بعید هم میدونم در آینده حتی مشکلی براشون پیش بیاد. اما اگه ریپو های خصوصی (private) داشتین متاسفانه دیگه بسته شده و در دسترس نیست.
همچنین صفحات github Pages هم بسته شده بود حتی برای پروژه های عمومی که این تصمیم گیتهاب واقعا غیر منطقی بود
خوشبختانه امروز گیتهاب دسترسی صفحات github Pages رو باز کرد و امکان تبدیل ریپو های خصوصی به عمومی رو فراهم کرد و در نتیجه میتونین سورس کد هاتون رو نجات بدین.
🔷 و اما حالا باید چیکار کنیم؟
در کل اینکه نگران نباشید به لطف ورژن کنترل Git تمام تاریخچه Commit ها و Branch ها و ... رو میشه زنده کرد (به غیر از Issue ها و تاریخچه Pull Request ها و Watch ها و... یه سری چیزا که اختصاصا مال گیتهابه ، نه گیت)
0️⃣ راه حل های بی فایده :
بدیهیه که استفاده از قند شکن و اینا تاثیری نداره پس اینقدر نپرسین. ضمنا برای اینکه اکانتتون رفع تحریم بشه، به پاسپورت غیر ایرانی نیاز دارین و راه تقلبی هم وجود نداره، پس هیچی.
1️⃣ مهاجرت نکنیم :
گیتهاب غیر از اینکه بزرگترین جامعه برنامه نویسای دنیاست، نشون دهنده هویت و سابقه یه برنامه نویس هم هست پس قاعدتا نمیشه و نباید دروشو خط کشید
بنابراین اگه صرفا از ریپو های پابلیک استفاده میکنین مشکلی نیست و نیاز به مهاجرت ندارین.
فقط کافیه ضربدر اون پیغام زرد رنگ رو مخی رو بزنین تا بره 😕
2️⃣ مهاجرت به GitLab :
گیت لب که خیلی وقت پیش ایرانی ها رو تحریم کرد ولی بازم صد رحمت بهش که به Block کردن IP ها بسنده کرد 😒
با فرض داشتن قند شکن یکی از گزینه ها انتقال به گیت لب هست ولی احتمالش هست که در آینده ای نه چندان دور مشکلات تحریم رو پیدا کنه.
اطلاعات بیشتر :
http://bit.ly/2K8CdLn
3️⃣ مهاجرت به Azure DevOps :
سرویس Azure DevOps ماکروسافت استثناعا تا الان هیچ تحریمی نگذاشته و محدودیت ریپو های خصوصیش تا 5 نفره که به نسبت بقیه گزینه بهتریه
ولی بازم احتمالش هست که در آینده ای نه چندان دور مشکلات تحریم رو پیدا کنه
4️⃣ گیت سرویس شخصی :
سایت گیت لب یه نسخه Community Edition (یا همون CE) داره که رایگان و قابل دانلوده و این امکان رو به شما میده که سایت گیت لب رو (با یه سری امکانات محدود) روی سرور خودتون نصب کنین.
خیلی هم سادس فقط به یه سرور لینوکسی نیاز داره (البته با داکر روی ویندوز هم میاد)
به غیر از گیت لب CE، پروژه های دیگه ای مانند Gitea و Gogs هم هستند
درکل این روش، کم ریسک ترین گزینه برای ریپو های خصوصی هست
____________
@IranAspMvc
Telegram
Attach Files
❇️ کنترل سطح دسترسی پویا و Permission-based
چند وقت پیش یکی از دوستان سوال پرسیده بودند که چطور میتونیم سطح دسترسی کاربر رو به اکشن های دلخواه، محدود کنیم. اتفاقا چند سال پیش همین نیاز رو خودمم داشتم و به این صورت هندلش کردیم که :
هر کاربر میتونه N تا Role داشته باشه و هر Role هم N تا پرمیژن داره
پرمیژن ها در واقع Fullname اکشن هایی هستند که کاربر بهشون دسترسی داره مثلا
MyProject.HomeController.Index
مشخص میکنه کاربر به این اکشن دسترسی داره و وجود نام کامل متد باعث میشه مشکل هم نام بودن اکشن ها و کنترولر ها در پروژه های Microservice رو هم نداشته باشیم
مدیریت این قضیه هم کاملا توسط Reflection و Caching خیلی شیک انجام میشد و نیازی پرفرمنس بسیار خوبی هم داشت با توجه به اینکه تعداد کاربرانمونم زیاد بود، ضمن اینکه هیچ گونه کد نویسی ویا چک کردن سطح دسترسی لازم نبود توسط برنامه نویس انجام بشه و همگی در یک ActionFilter سراسری هندل میشد
قابلیت دیگه ای هم که نیاز بود و بهش اضافه کردیم بحث Group کردن اکشن های مرتبط بود. مثلا کاربری که دسترسی به ویرایش یک سند داره عملا به 3 اکشن Detail, Edit(Get) , Update(Post) x باید دسترسی داشته باشه، درنتیجه میتونستیم با اضافه کردن یک پرمیشن، 3 اکشن رو دسترسی داشته باشه
حتی واسه نیاز های پیچیده تر میتونین بحث Include و Exclude کردن یک یا چند پرمیژن رو از یک Role هم اضافه کنید. مثلا یک کاربر نقش Writer داره ولی... به یک اکشن از Report هم دسترسی داره (Include) و یا به یک اکشن خاص از نقش Writer نباید دسترسی داشته باشه (Exclude)
سلوشن بالا تمامی نیاز های مارو به خوبی برطرف کرد و کاملا راضی بودیم، برای پیاده سازیش هم میتونین از Identity یا هر پیاده سازی دلخواه برای احراز هویت استفاده کنید
در کل ما 3 نوع کنترل سطح دسترسی داریم
سطح Api level (کنترل دسترسی به یک action/api خاص)
سطح Operation level (کنترل دسترسی به یک فرایند/بیزنس لاجیک خاص)
سطح Data level (کنترل دسترسی برای دیتای دریافتی از دیتابیس)
روش بالا برای کنترل دسترسی در سطح Action (همون Api level) هست و برای نیاز های دیگه کنترل دسترسی مثل کنترل دسترسی به یک فرایند خاص (Operation level) میتونین از مکانیزم ACL (مخفف access control list) استفاده کنید
برای کنترل دسترسی در سطح Data (همون Data level) برای کوئری گرفتن هم از Global Query Filter خود EF Core استفاده کنید
https://long2know.com/2017/05/entity-framework-multitenancy/
https://trailheadtechnology.com/entity-framework-core-2-1-automate-all-that-boring-boiler-plate/
یه رویکرد دیگه که به نظر اصولی تر هم هست ولی یه کم تخصصی تره
بحث کنترل دسترسی در سطح Service ها توسط تکنیک AOP هست
مثلا این مقاله با CastleWindsor اومده قبل از اجرا شدن متد های سرویس، دسترسی کاربر رو چک کرده
https://lukemerrett.com/aop-in-castle-windsor/
از مزایای این روش میشه به این اشاره کرد که شما میتونین لایه سرویس (همون منطق تجاری پروژه) رو توی پروژه های دیگه هم به صورت مستقل استفاده کنید و نگران سطح دسترسی نباشید چون همش تو همون لایه داره چک میشه
مدیریتش تو لایه Repsitory هم یک روش مرسوم هست
عملا استفاده از روش repository و Global Query Filter داره یک کار رو انجام میده
هر دو با شرط گذاشتن روی کوئری ها، دسترسی رو چک میکنن تنها تفاوت بینشون اینه که Global Query Filter این کار رو به صورت اتوماتیک انجام میده و دیگه لازم نیست موقع کوئری نوشتن حواسمون باشه که شرط فیلتر رو هم بگذاریم
و مزیتش دیگه اش هم اینه که موقع Explicit Loading (همون Include) و
حتی موقع Eager Loading (توسط LoadCollection و LoadReference) هم این موضوع به صورت خودکار چک میشه. توی EF 6 نبود این ویژگی. توی EF Core 2.0 اضافه شد
این سری مقاله رو هم پیشنهاد میکنم بخونین، توضیحات خوبی در مورد روش های کنترل سطح دسترسی داده
Part 1: A better way to handle authorization in ASP.NET Core
https://bit.ly/2KaAo0q
Part 2: Handling data authorization in ASP.NET Core and Entity Framework Core
https://bit.ly/2KbA9SG
Part 3: A better way to handle ASP.NET Core authorization – six months on
https://bit.ly/2K8Z6hU
Part 4: Building a robust and secure data authorization with EF Core
https://bit.ly/2K885zH
_________________
@IranAspMvc
چند وقت پیش یکی از دوستان سوال پرسیده بودند که چطور میتونیم سطح دسترسی کاربر رو به اکشن های دلخواه، محدود کنیم. اتفاقا چند سال پیش همین نیاز رو خودمم داشتم و به این صورت هندلش کردیم که :
هر کاربر میتونه N تا Role داشته باشه و هر Role هم N تا پرمیژن داره
پرمیژن ها در واقع Fullname اکشن هایی هستند که کاربر بهشون دسترسی داره مثلا
MyProject.HomeController.Index
مشخص میکنه کاربر به این اکشن دسترسی داره و وجود نام کامل متد باعث میشه مشکل هم نام بودن اکشن ها و کنترولر ها در پروژه های Microservice رو هم نداشته باشیم
مدیریت این قضیه هم کاملا توسط Reflection و Caching خیلی شیک انجام میشد و نیازی پرفرمنس بسیار خوبی هم داشت با توجه به اینکه تعداد کاربرانمونم زیاد بود، ضمن اینکه هیچ گونه کد نویسی ویا چک کردن سطح دسترسی لازم نبود توسط برنامه نویس انجام بشه و همگی در یک ActionFilter سراسری هندل میشد
قابلیت دیگه ای هم که نیاز بود و بهش اضافه کردیم بحث Group کردن اکشن های مرتبط بود. مثلا کاربری که دسترسی به ویرایش یک سند داره عملا به 3 اکشن Detail, Edit(Get) , Update(Post) x باید دسترسی داشته باشه، درنتیجه میتونستیم با اضافه کردن یک پرمیشن، 3 اکشن رو دسترسی داشته باشه
حتی واسه نیاز های پیچیده تر میتونین بحث Include و Exclude کردن یک یا چند پرمیژن رو از یک Role هم اضافه کنید. مثلا یک کاربر نقش Writer داره ولی... به یک اکشن از Report هم دسترسی داره (Include) و یا به یک اکشن خاص از نقش Writer نباید دسترسی داشته باشه (Exclude)
سلوشن بالا تمامی نیاز های مارو به خوبی برطرف کرد و کاملا راضی بودیم، برای پیاده سازیش هم میتونین از Identity یا هر پیاده سازی دلخواه برای احراز هویت استفاده کنید
در کل ما 3 نوع کنترل سطح دسترسی داریم
سطح Api level (کنترل دسترسی به یک action/api خاص)
سطح Operation level (کنترل دسترسی به یک فرایند/بیزنس لاجیک خاص)
سطح Data level (کنترل دسترسی برای دیتای دریافتی از دیتابیس)
روش بالا برای کنترل دسترسی در سطح Action (همون Api level) هست و برای نیاز های دیگه کنترل دسترسی مثل کنترل دسترسی به یک فرایند خاص (Operation level) میتونین از مکانیزم ACL (مخفف access control list) استفاده کنید
برای کنترل دسترسی در سطح Data (همون Data level) برای کوئری گرفتن هم از Global Query Filter خود EF Core استفاده کنید
https://long2know.com/2017/05/entity-framework-multitenancy/
https://trailheadtechnology.com/entity-framework-core-2-1-automate-all-that-boring-boiler-plate/
یه رویکرد دیگه که به نظر اصولی تر هم هست ولی یه کم تخصصی تره
بحث کنترل دسترسی در سطح Service ها توسط تکنیک AOP هست
مثلا این مقاله با CastleWindsor اومده قبل از اجرا شدن متد های سرویس، دسترسی کاربر رو چک کرده
https://lukemerrett.com/aop-in-castle-windsor/
از مزایای این روش میشه به این اشاره کرد که شما میتونین لایه سرویس (همون منطق تجاری پروژه) رو توی پروژه های دیگه هم به صورت مستقل استفاده کنید و نگران سطح دسترسی نباشید چون همش تو همون لایه داره چک میشه
مدیریتش تو لایه Repsitory هم یک روش مرسوم هست
عملا استفاده از روش repository و Global Query Filter داره یک کار رو انجام میده
هر دو با شرط گذاشتن روی کوئری ها، دسترسی رو چک میکنن تنها تفاوت بینشون اینه که Global Query Filter این کار رو به صورت اتوماتیک انجام میده و دیگه لازم نیست موقع کوئری نوشتن حواسمون باشه که شرط فیلتر رو هم بگذاریم
و مزیتش دیگه اش هم اینه که موقع Explicit Loading (همون Include) و
حتی موقع Eager Loading (توسط LoadCollection و LoadReference) هم این موضوع به صورت خودکار چک میشه. توی EF 6 نبود این ویژگی. توی EF Core 2.0 اضافه شد
این سری مقاله رو هم پیشنهاد میکنم بخونین، توضیحات خوبی در مورد روش های کنترل سطح دسترسی داده
Part 1: A better way to handle authorization in ASP.NET Core
https://bit.ly/2KaAo0q
Part 2: Handling data authorization in ASP.NET Core and Entity Framework Core
https://bit.ly/2KbA9SG
Part 3: A better way to handle ASP.NET Core authorization – six months on
https://bit.ly/2K8Z6hU
Part 4: Building a robust and secure data authorization with EF Core
https://bit.ly/2K885zH
_________________
@IranAspMvc
Telegram
Attach Files
Forwarded from جادی، کیبورد آزاد - Jadi
تولید دوره آموزشی در مورد بلاک چین و بیت کوین در حمایت از سیل زدهها، فرصت اسپانسری
https://2nate.com/jadijadi/bockchain-for-flood-support
من می خوام یک دوره آموزشی بلاک چین بسازم، به همراه نگاه دائمی به بیت کوین. تو این دوره آنلاین که احتمالا حدود ۱۵ ساعت می شه و احتمالا حدود ۲۰ ویدئو، مفاهیم پایه ای پشت بلاکچین مثل منطق و مفهوم کلی، مفاهیم مورد نیاز رمزنگاری، اثبات کار و موارد مشابه رو می گیم و همزمان دائما نمونه اجراییش توی بیت کوین رو نگاه می کنیم. سر فصل ها از روی کتاب Bitcoin and Cryptocurrency Technologies_ A Comprehensive Introduction خواهند بود که جاهای مختلفی مثل برکلی، کرنل و پرینستون تدریس می شه. در اواخر دوره یک سیستم مستقل بلاک چین برای خودمون خواهیم نوشت تا مطمئن بشیم که همه مفاهیم رو نه فقط فهمیدیم که می تونیم استفاده کنیم و با بررسی بخش هایی از کد بیت کوین دوره رو تموم خواهیم کرد.
هدف من درست کردن یک دوره آزاد برای هر کسی است که به بحث علاقمنده ولی فکر کردم این پروژه می تونه یک منفعت دیگه هم داشته باشه: جمع آوری کمک مالی برای سیل زده هایی که نباید از یادشون ببریم.
برای همین توی سایت ۲نیت، یه پروژه تعریف کردم که حینش بتونیم ۱۰ میلیون تومن جمع کنیم (با احتساب ۱۰٪ سود سایت) و صد در صدش رو به یکی از سازمان ها / تیم هایی بدیم که دارن در مناطق سیل زده کار می کنن یا در اونجا کار مفیدی از پیش می برن. هنوز تصمیم نگرفتم چه سازمان یا گروهی ولی کار سختی نخواهد بود چون در اون مقیاس پول کوچیکی است و احتمالا باهاش می شه یه کار کوچیک رو پیش برد یا جمع کرد. پس اگر سازمانی هستین که دوست داره لوگوش یا اسمش تو این ویدئوها باشه یا کسی هستین که دوست داره هر مقدار که می تونه کمک کنه تا هم به سیل زده ها کمک بشه و هم دوره رو بسازیم، از کمپین تولید دوره آموزشی بلاکچین در حمایت از سیل زدگان مشارکت کنین که دو تا چیز خوب رو پیش ببریم.
معلومه که اگر این پول جمع نشه هم دوره ساخته می شه (: این فقط یک بهانه است برای یک کار جانبی خوب و معلومه که من در کل مخالف خیریه هستم و به نظرم مشکلات آدم ها چیزی نیست که با پول جمع کردن آدم های دیگه حل بشه. سیستم موظف است با اونهمه بودجه و نفت و مالیات این مشکلات رو حل کنه... ولی وقتی نمی کنه مجبورم قدم کوچیک خودم رو بردارم چون در نهایت، رنج یک نفر آدم شاید کمتر بشه.
کانال @jadinet
https://2nate.com/jadijadi/bockchain-for-flood-support
من می خوام یک دوره آموزشی بلاک چین بسازم، به همراه نگاه دائمی به بیت کوین. تو این دوره آنلاین که احتمالا حدود ۱۵ ساعت می شه و احتمالا حدود ۲۰ ویدئو، مفاهیم پایه ای پشت بلاکچین مثل منطق و مفهوم کلی، مفاهیم مورد نیاز رمزنگاری، اثبات کار و موارد مشابه رو می گیم و همزمان دائما نمونه اجراییش توی بیت کوین رو نگاه می کنیم. سر فصل ها از روی کتاب Bitcoin and Cryptocurrency Technologies_ A Comprehensive Introduction خواهند بود که جاهای مختلفی مثل برکلی، کرنل و پرینستون تدریس می شه. در اواخر دوره یک سیستم مستقل بلاک چین برای خودمون خواهیم نوشت تا مطمئن بشیم که همه مفاهیم رو نه فقط فهمیدیم که می تونیم استفاده کنیم و با بررسی بخش هایی از کد بیت کوین دوره رو تموم خواهیم کرد.
هدف من درست کردن یک دوره آزاد برای هر کسی است که به بحث علاقمنده ولی فکر کردم این پروژه می تونه یک منفعت دیگه هم داشته باشه: جمع آوری کمک مالی برای سیل زده هایی که نباید از یادشون ببریم.
برای همین توی سایت ۲نیت، یه پروژه تعریف کردم که حینش بتونیم ۱۰ میلیون تومن جمع کنیم (با احتساب ۱۰٪ سود سایت) و صد در صدش رو به یکی از سازمان ها / تیم هایی بدیم که دارن در مناطق سیل زده کار می کنن یا در اونجا کار مفیدی از پیش می برن. هنوز تصمیم نگرفتم چه سازمان یا گروهی ولی کار سختی نخواهد بود چون در اون مقیاس پول کوچیکی است و احتمالا باهاش می شه یه کار کوچیک رو پیش برد یا جمع کرد. پس اگر سازمانی هستین که دوست داره لوگوش یا اسمش تو این ویدئوها باشه یا کسی هستین که دوست داره هر مقدار که می تونه کمک کنه تا هم به سیل زده ها کمک بشه و هم دوره رو بسازیم، از کمپین تولید دوره آموزشی بلاکچین در حمایت از سیل زدگان مشارکت کنین که دو تا چیز خوب رو پیش ببریم.
معلومه که اگر این پول جمع نشه هم دوره ساخته می شه (: این فقط یک بهانه است برای یک کار جانبی خوب و معلومه که من در کل مخالف خیریه هستم و به نظرم مشکلات آدم ها چیزی نیست که با پول جمع کردن آدم های دیگه حل بشه. سیستم موظف است با اونهمه بودجه و نفت و مالیات این مشکلات رو حل کنه... ولی وقتی نمی کنه مجبورم قدم کوچیک خودم رو بردارم چون در نهایت، رنج یک نفر آدم شاید کمتر بشه.
کانال @jadinet
❇️ معرفی کتابخانهی DNTScanner.Core
کتابخانهی DNTScanner.Core که توسط وحید نصیری عزیز نوشته شده امکان کار با اسکنر رو در برنامههای NET 4x. و همچنین NET Core. ویندوزی فراهم میکنه. روشی که در اون استفاده شده مشکلاتی مانند عدم امکان استفادهی از اون در سرویسهای پسزمینه رو نداره از این جهت که برای دسترسی به اسکنر، هیچ نوع UI ای رو نمایش نمیده و تمام تنظیمات آن با کدنویسی انجام شده.
_______________
@IranAspMvc
کتابخانهی DNTScanner.Core که توسط وحید نصیری عزیز نوشته شده امکان کار با اسکنر رو در برنامههای NET 4x. و همچنین NET Core. ویندوزی فراهم میکنه. روشی که در اون استفاده شده مشکلاتی مانند عدم امکان استفادهی از اون در سرویسهای پسزمینه رو نداره از این جهت که برای دسترسی به اسکنر، هیچ نوع UI ای رو نمایش نمیده و تمام تنظیمات آن با کدنویسی انجام شده.
_______________
@IranAspMvc
❇️ لیست برترین CMS های سورس باز ASP.NET Core
✔️ مرتب شده بر اساس محبوبیت
🔸1- nopCommerce (e-commerce)
🔹2- OrchardCMS
🔸3- SimplCommerce (e-commerce)
🔹4- Miniblog.Core
🔸5- Squidex (headless CMS)
🔹6- GrandNode (e-commerce)
🔸7- Weapsy
🔹8- Piranha CMS
🔸9- Cofoundry
🔹10- Blogifier
🔸11- Platformus
🔹12- SimpleContent
🔸13- Awesome CMS Core
🔹14- BlogCore (Blazor blog)
🔸15- Lynicon CMS
🔹16- NetCoreCMS
🔸17- VirtoCommerce (e-commerce)
https://dottutorials.net/top-open-source-asp-net-core-cms
__________________
@IranAspMvc
✔️ مرتب شده بر اساس محبوبیت
🔸1- nopCommerce (e-commerce)
🔹2- OrchardCMS
🔸3- SimplCommerce (e-commerce)
🔹4- Miniblog.Core
🔸5- Squidex (headless CMS)
🔹6- GrandNode (e-commerce)
🔸7- Weapsy
🔹8- Piranha CMS
🔸9- Cofoundry
🔹10- Blogifier
🔸11- Platformus
🔹12- SimpleContent
🔸13- Awesome CMS Core
🔹14- BlogCore (Blazor blog)
🔸15- Lynicon CMS
🔹16- NetCoreCMS
🔸17- VirtoCommerce (e-commerce)
https://dottutorials.net/top-open-source-asp-net-core-cms
__________________
@IranAspMvc
DotTutorials
Top Open Source ASP.NET Content Management System (CMS)
Introduction Unlike PHP, ASP.NET Core Developers don’t have many options available when It comes to…
Forwarded from Iran Agile
در تیمهای نرمافزاری و استارتاپ ها یکی از سختترین تصمیمات، ساختن یا نساختن یک فیچر یا قابلیت جدید است.
مشتریان یا مدیران یا افراد مختلف ایدههای زیادی به ما میدهند، ولی کدامیک از آنها را باید پیادهسازی کرد؟ و با چه استدلالی؟
این فلوچارت کمک میکند تا بتوانید راحتتر در این خصوص تصمیم بگیرید.
@iranagile
مشتریان یا مدیران یا افراد مختلف ایدههای زیادی به ما میدهند، ولی کدامیک از آنها را باید پیادهسازی کرد؟ و با چه استدلالی؟
این فلوچارت کمک میکند تا بتوانید راحتتر در این خصوص تصمیم بگیرید.
@iranagile
Forwarded from کدهک
جنگ ابری
گزارش مالی مایکروسافت نشان میدهد این شرکت در سال گذشته 38 میلیارد دلار از خدمات ابری سود داشته است.
این در حالی است که سرویس وب آمازون 25.6 میلیارد دلار بوده است و گوگل هم تنها با 8 میلیارد دلار در رتبه ی سوم قرار گرفته است.
سیاستهای جدید مایکروسافت در ارائه خدمات اوپن سورس و پذیرفتن لینکوس به عنوان بخش از اکو سیستم خدمات رسانی ابری باعث جذب مشتریان زیادی شده است.
مایکروسافت در حال حاضر با 56 دیتاسنتر در سراسر دنیا خدمات ابری Azure را عرضه می کند. همچنین تنها شرکتی است که در آفریقا و خاور میانه دیتاسنتر دارد.
منبع : فوربس
گزارش مالی مایکروسافت نشان میدهد این شرکت در سال گذشته 38 میلیارد دلار از خدمات ابری سود داشته است.
این در حالی است که سرویس وب آمازون 25.6 میلیارد دلار بوده است و گوگل هم تنها با 8 میلیارد دلار در رتبه ی سوم قرار گرفته است.
سیاستهای جدید مایکروسافت در ارائه خدمات اوپن سورس و پذیرفتن لینکوس به عنوان بخش از اکو سیستم خدمات رسانی ابری باعث جذب مشتریان زیادی شده است.
مایکروسافت در حال حاضر با 56 دیتاسنتر در سراسر دنیا خدمات ابری Azure را عرضه می کند. همچنین تنها شرکتی است که در آفریقا و خاور میانه دیتاسنتر دارد.
منبع : فوربس