ممکن است Apex شما در Summer '26 رکوردهای کمتری برگرداند
Salesforce Summer '26 (API v67.0) تغییر بزرگی را در Apex ایجاد میکند. این تغییر میتواند بدون ایجاد خطا، نتایج کد شما را تغییر دهد.
سالها بود که Apex بهصورت پیشفرض در system mode اجرا میشد. این بدان معنا بود که SOQL، SOSL و DML مجوزهای کاربر (user permissions) و قوانین اشتراکگذاری (sharing rules) را نادیده میگرفتند. کد شما میتوانست دادهها را به کاربرانی نشان دهد که نباید آنها را میدیدند.
در API v67.0، حالت پیشفرض تغییر میکند. عملیات پایگاه داده اکنون در user mode اجرا میشوند.
تغییرات در v67.0:
• SOQL، SOSL و DML بهصورت پیشفرض مجوزهای کاربر و قوانین اشتراکگذاری را اعمال میکنند. • کلاسهایی که فاقد اعلان sharing هستند، اکنون بهصورت پیشفرض "with sharing" خواهند بود. • عبارت "WITH SECURITY_ENFORCED" حذف شده است. در عوض باید از "WITH USER_MODE" استفاده کنید. • تریگرها (Triggers) همیشه در system mode اجرا میشوند.
این تغییر به نسخه API کلاس شما وابسته است. کلاسهای قدیمی شما تا زمانی که آنها را به نسخه 67.0 ارتقا ندهید، بدون تغییر باقی میمانند. این ویژگی به شما اجازه میدهد فرآیند مهاجرت (migration) را کنترل کنید.
مراقب این مشکلات پنهان باشید:
- رکوردهای کمتر در کوئریها: یک کوئری ممکن است به دلیل عدم دسترسی کاربر، به جای ۵۰۰ ردیف، ۴۰ ردیف را برگرداند. این امر باعث محاسبات اشتباه مجموع و گزارشهای نادرست میشود.
- خطاهای کامپایل: عبارت "WITH SECURITY_ENFORCED" در نسخه جدید با خطای کامپایل مواجه خواهد شد.
- شکست در یکپارچهسازی (Integration): کاربرانِ یکپارچهسازی ممکن است دسترسی به دادههایی که برای وظایف خودکار (automated jobs) نیاز دارند را از دست بدهند.
- تغییرات در اشتراکگذاری: کلاسهایی که بر عدم اعلان sharing تکیه داشتند، اکنون قوانین اشتراکگذاری را اعمال خواهند کرد.
چگونه با امنیت کامل مهاجرت کنیم:
- کدهای خود را بررسی کنید: عبارت "WITH SECURITY_ENFORCED" و کلاسهای فاقد اعلانهای sharing را جستجو کنید.
- در یک sandbox تست کنید: ابتدا کلاسهای پرخطر مانند کنترلرها (controllers) و نقاط پایانی REST (REST endpoints) را بهروزرسانی کنید.
- از
System.runAs()استفاده کنید: فقط به موفقیت تستها اکتفا نکنید. با کاربران دارای محدودیت تست کنید تا قابلیت مشاهده دادهها را بررسی کنید. - آگاهانه عمل کنید: تنها زمانی از "SYSTEM_MODE" یا "without sharing" استفاده کنید که دلیل مشخصی داشته باشید.
انجام این تغییرات در حال حاضر، از بروز باگهای پنهان در محیط عملیاتی (production) در آینده جلوگیری میکند.
Optional learning community: https://t.me/GyaanSetuAi