استفاده از قابلیت‌های سفارشی در وردپرس نیاز به ثبت دارد چون سیستم کنترل دسترسی وردپرس، تنها قابلیت‌هایی را می‌شناسد که در فهرست رسمی ثبت شده باشند و بدون ثبت، این قابلیت‌ها در بررسی‌های امنیتی نادیده گرفته می‌شوند.

قابلیت سفارشی، برخلاف قابلیت‌های پیش‌فرض وردپرس، در لایه داخلی سیستم وجود ندارد و باید به‌صورت صریح به فهرست قابلیت‌های شناخته‌شده اضافه شود.

بدون ثبت، افزونه مدیریت نقش قادر به نمایش قابلیت در رابط کاربری نیست و مدیر سایت نمی‌تواند آن را به نقش‌ها اختصاص دهد.

بدون ثبت، توابع بررسی دسترسی مانند current_user_can ممکن است نتیجه نادرست بازگردانند و رفتار غیرقابل پیش‌بینی ایجاد کنند.

بدون ثبت، افزونه‌های امنیتی و ابزارهای پایش قابلیت را نادیده می‌گیرند و همین نادیده گرفتن، به یک شکاف پنهان امنیتی تبدیل می‌شود.

در پروژه‌ای که یک افزونه اختصاصی برای مدیریت محتوای سازمانی توسعه می‌دادم، با یک رفتار عجیب روبه‌رو شدم: قابلیتی که در کد تعریف شده بود، در رابط کاربری افزونه مدیریت نقش نمایش داده نمی‌شد و مدیر سایت نمی‌توانست آن را به کسی اختصاص دهد. پس از بررسی، علت مشخص شد: قابلیت در زمان اشتباه ثبت شده بود و به همین دلیل، سیستم کنترل دسترسی از وجود آن آگاه نبود. آن تجربه به روشنی نشان داد که ثبت قابلیت سفارشی، پیش از آنکه یک جزئیات فنی باشد، یک الزام ساختاری است که اگر نادیده گرفته شود، کل منطق کنترل دسترسی را می‌شکند.

چرا قابلیت سفارشی بدون ثبت ناقص است

وردپرس برای هر قابلیت، یک مسیر داخلی دارد که در آن مشخص می‌شود کدام نقش‌ها به آن دسترسی دارند. اگر قابلیتی در این مسیر ثبت نشود، سیستم آن را نمی‌شناسد، حتی اگر در کد به آن ارجاع داده شود.

فهرست بسته قابلیت‌های شناخته‌شده

وردپرس فهرست مشخصی از قابلیت‌های پیش‌فرض دارد که در هسته تعریف شده‌اند. برای قابلیت‌های سفارشی، این فهرست بسته است و باید به‌صورت صریح گسترش یابد. بدون این گسترش، قابلیت سفارشی در بررسی‌های دسترسی نادیده گرفته می‌شود.

لایه بررسی دسترسی و نقش قابلیت

وقتی افزونه‌ای با تابع current_user_can بررسی می‌کند که آیا کاربر به قابلیت خاصی دسترسی دارد، وردپرس ابتدا فهرست قابلیت‌های کاربر را از متادیتای نقش‌های او استخراج می‌کند. اگر قابلیت سفارشی در هیچ نقشی ثبت نشده باشد، این فهرست خالی خواهد بود و بررسی با شکست روبه‌رو می‌شود.

پیوند با نقش‌ها و Capability Map

هسته وردپرس یک Map داخلی دارد که نقش‌ها را به قابلیت‌ها پیوند می‌دهد. این Map در جدول wp_options و کلید wp_user_roles ذخیره می‌شود. برای اینکه قابلیت سفارشی در این Map ظاهر شود، باید در زمان تعریف نقش یا در زمان اجرای افزونه، به فهرست اضافه شود.

اثر نبود ثبت بر تجربه کاربری مدیر

بدون ثبت، مدیر سایت در رابط کاربری افزونه مدیریت نقش، قابلیت سفارشی را نمی‌بیند. حتی اگر افزونه‌ای به‌صورت برنامه‌نویسی از قابلیت استفاده کند، مدیر نمی‌تواند آن را به کسی اختصاص دهد. این مسئله در سازمان‌هایی که مدیر سایت غیرفنی است، منبع اصلی سردرگمی است.

اثر نبود ثبت بر ابزارهای پایش

افزونه‌های امنیتی و ابزارهای پایش، فهرست قابلیت‌ها را از همان Map داخلی استخراج می‌کنند. اگر قابلیت سفارشی در این Map نباشد، ابزارهای پایش آن را نمی‌بینند و رفتار کاربران مرتبط با آن قابلیت، از پایش خارج می‌شود. این نادیده گرفتن، به یک شکاف پنهان امنیتی تبدیل می‌شود. اگر در این حوزه کار می‌کنید، راهنمای امنیت وردپرس چیست نقطه شروع مناسبی است.

قابلیتی که ثبت نشده باشد، از نظر سیستم وجود ندارد؛ حتی اگر در کد به آن ارجاع داده شود.

وردپرس چگونه قابلیت‌ها را می‌شناسد

برای درک دقیق ضرورت ثبت، باید ابتدا بفهمیم که وردپرس در چه لایه‌ای قابلیت‌ها را مدیریت می‌کند و این مدیریت چگونه به نقش‌ها پیوند می‌خورد.

ساختار wp_user_roles در Options

تعریف نقش‌ها و قابلیت‌های آنها در جدول wp_options و در کلید wp_user_roles ذخیره می‌شود. این داده، ساختاری آرایه‌ای دارد که در آن هر نقش، فهرستی از قابلیت‌های خود را نگهداری می‌کند. برای اینکه قابلیت سفارشی در این ساختار ظاهر شود، باید به آن اضافه شود.

پیوند کاربر با نقش و قابلیت

هر کاربر در متادیتای خود، فهرست نقش‌ها را ذخیره می‌کند. وردپرس در زمان بررسی دسترسی، نقش‌های کاربر را می‌خواند و از کلید wp_user_roles، قابلیت‌های هر نقش را استخراج می‌کند. بنابراین قابلیتی که در wp_user_roles نباشد، در این فرآیند دیده نمی‌شود.

هوک‌های مرتبط با مدیریت قابلیت

وردپرس هوک‌های مختلفی برای مدیریت قابلیت‌ها ارائه می‌دهد. از جمله user_has_cap، map_meta_cap و هوک‌های مرتبط با نقش‌ها. این هوک‌ها امکان دخالت در لایه بررسی دسترسی را فراهم می‌کنند اما جایگزین ثبت قابلیت نیستند. اگر با هوک‌ها آشنایی ندارید، راهنمای هوک‌های وردپرس چیستند مفاهیم پایه را روشن می‌کند.

تفاوت قابلیت پیش‌فرض و سفارشی

قابلیت‌های پیش‌فرض وردپرس در هسته ثبت شده‌اند و نیازی به ثبت دوباره ندارند. قابلیت‌های سفارشی، برعکس، در هسته وجود ندارند و باید از طریق افزونه یا قالب به فهرست اضافه شوند. این تفاوت، دلیل اصلی ضرورت ثبت است.

پیوند با افزونه‌های مدیریت نقش

افزونه‌های مدیریت نقش مانند Members و User Role Editor، فهرست قابلیت‌ها را از همان Map داخلی می‌خوانند. اگر قابلیت سفارشی در این Map نباشد، در رابط کاربری این افزونه‌ها هم نمایش داده نمی‌شود. این مسئله، کار مدیر سایت را در اختصاص قابلیت به نقش‌ها دشوار می‌کند.

روش‌های ثبت قابلیت سفارشی در وردپرس

وردپرس چند روش برای ثبت قابلیت سفارشی فراهم می‌کند. انتخاب روش درست، بستگی به سناریو و معماری پروژه دارد.

روش اول: افزودن قابلیت به نقش در زمان فعال‌سازی افزونه

در این روش، در زمان فعال‌سازی افزونه، قابلیت سفارشی به نقش موردنظر اضافه می‌شود. این کار معمولاً با تابع add_cap روی شیء نقش انجام می‌شود. اگر افزونه غیرفعال شود، باید قابلیت هم از نقش حذف شود تا باقی‌مانده‌ای در دیتابیس نماند.

روش دوم: ثبت قابلیت از طریق هوک init

در این روش، قابلیت در هر بار بارگذاری وردپرس و از طریق هوک init به نقش‌ها اضافه می‌شود. این رویکرد، تضمین می‌کند که قابلیت همیشه در فهرست باشد، حتی اگر دیتابیس بازنشانی شود. اما این روش، در هر بار بارگذاری، بررسی‌های اضافه‌ای انجام می‌دهد که در سایت‌های پرترافیک قابل توجه است.

روش سوم: تعریف قابلیت از طریق فیلتر user_has_cap

در این روش، با استفاده از فیلتر user_has_cap، قابلیت سفارشی به‌صورت پویا به کاربران اعطا می‌شود. این رویکرد، برای قابلیت‌هایی مناسب است که بر پایه منطق پیچیده تعیین می‌شوند. اما در این روش، قابلیت در فهرست رسمی نمایش داده نمی‌شود و مدیر نمی‌تواند آن را از رابط کاربری اختصاص دهد.

روش چهارم: استفاده از تابع add_cap در زمان تعریف نقش

در این روش، در زمان تعریف نقش سفارشی با تابع add_role، فهرست قابلیت‌ها به‌عنوان پارامتر دوم ارسال می‌شود. این رویکرد، ساده‌ترین روش برای ثبت قابلیت سفارشی است و در افزونه‌های اختصاصی بسیار استفاده می‌شود.

روش پنجم: ترکیب چند روش

در پروژه‌های پیچیده، ترکیب چند روش می‌تواند مناسب‌تر باشد. برای مثال، قابلیت در زمان فعال‌سازی افزونه به نقش اضافه شود و در فیلتر user_has_cap، بررسی‌های اضافی اعمال گردد. اگر در این حوزه کار می‌کنید، راهنمای استفاده از توابع وردپرس در پروژه‌ها نکات دقیق‌تری ارائه می‌دهد.

زمان‌بندی ثبت و مسئله ترتیب اجرا

زمان‌بندی ثبت قابلیت، به اندازه خود ثبت اهمیت دارد. اگر ثبت در زمان اشتباه انجام شود، حتی اگر قابلیت به‌درستی تعریف شده باشد، سیستم آن را نمی‌شناسد.

ترتیب اجرای افزونه‌ها

افزونه‌ها به ترتیب فهرست در پوشه plugins بارگذاری می‌شوند. اگر افزونه‌ای که قابلیت را ثبت می‌کند، زودتر از افزونه‌ای بارگذاری شود که از آن قابلیت استفاده می‌کند، قابلیت در فهرست خواهد بود. اگر دیرتر بارگذاری شود، احتمال بروز خطا در زمان بررسی دسترسی وجود دارد.

وابستگی به هوک init و admin_init

هوک init در اوایل چرخه بارگذاری وردپرس اجرا می‌شود و برای ثبت قابلیت مناسب است. هوک admin_init کمی دیرتر اجرا می‌شود و برای کارهای مدیریتی مناسب است اما برای ثبت قابلیت، ممکن است زمان‌بندی مناسبی نداشته باشد. انتخاب هوک درست، بخشی از طراحی درست ثبت قابلیت است.

زمان فعال‌سازی و غیرفعال‌سازی افزونه

در زمان فعال‌سازی افزونه، می‌توان قابلیت را به نقش‌ها اضافه کرد. در زمان غیرفعال‌سازی، باید قابلیت را حذف کرد. این چرخه، از باقی ماندن قابلیت‌های بی‌استفاده جلوگیری می‌کند و از انحراف ساختار نقش‌ها می‌کاهد.

زمان حذف افزونه

در زمان حذف کامل افزونه، باید همه داده‌های مرتبط، از جمله قابلیت‌های سفارشی، از دیتابیس پاک شوند. اگر این پاک‌سازی انجام نشود، باقی‌مانده‌ها در دیتابیس باقی می‌مانند و به بدهی فنی تبدیل می‌شوند.

پیوند با فرآیند استقرار

در محیط‌های چندگانه مانند Staging و Production، زمان‌بندی ثبت قابلیت باید هماهنگ باشد. اگر در یک محیط ثبت انجام شود و در محیط دیگر نه، ناهماهنگی رخ می‌دهد. اگر در این حوزه کار می‌کنید، راهنمای ناهماهنگی نقش‌ها در محیط‌های استقرار نکات دقیق‌تری ارائه می‌دهد.

پیوند قابلیت ثبت‌شده با نقش‌ها

ثبت قابلیت، فقط اولین گام است. گام دوم، پیوند قابلیت ثبت‌شده با نقش‌های موردنظر است. این پیوند، تعیین می‌کند که کدام کاربران به قابلیت دسترسی داشته باشند.

اختصاص قابلیت به نقش در زمان تعریف

در زمان تعریف نقش با تابع add_role، فهرست قابلیت‌ها به‌عنوان پارامتر ارسال می‌شود. این رویکرد، ساده‌ترین روش برای پیوند اولیه قابلیت با نقش است. اما اگر در آینده قابلیت جدیدی اضافه شود، نیازمند به‌روزرسانی کد است.

اختصاص قابلیت به نقش در زمان اجرا

با استفاده از تابع add_cap روی شیء نقش، می‌توان قابلیت را در هر زمان به نقش اضافه کرد. این رویکرد، انعطاف بیشتری فراهم می‌کند اما باید با دقت مدیریت شود تا از انحراف ساختار نقش‌ها جلوگیری شود.

حذف قابلیت از نقش

در زمان حذف قابلیت از نقش، باید از تابع remove_cap استفاده کرد. این کار، از باقی ماندن دسترسی‌های غیرمجاز جلوگیری می‌کند. اگر قابلیت از یک نقش حذف شود اما در نقش‌های دیگر باقی بماند، رفتار دسترسی‌ها غیرقابل پیش‌بینی می‌شود.

پیوند قابلیت با نقش سفارشی در افزونه اختصاصی

در پروژه‌های سفارشی، بهترین رویکرد این است که قابلیت‌ها و نقش‌های سفارشی، هر دو در یک افزونه اختصاصی تعریف شوند. این رویکرد، تفکیک مسئولیت را تضمین می‌کند و از تداخل با افزونه‌های دیگر جلوگیری می‌کند. اگر در این حوزه کار می‌کنید، راهنمای مدیریت کاربران و نقش‌ها در وردپرس نکات دقیق‌تری ارائه می‌دهد.

پیوند قابلیت با نقش‌های پیش‌فرض

گاهی نیاز است که قابلیت سفارشی به نقش‌های پیش‌فرض مانند Editor یا Author اضافه شود. این کار باید با احتیاط انجام شود، چون ممکن است ساختار پیش‌فرض وردپرس را به‌هم بزند. بهتر است در این موارد، نقش سفارشی تعریف شود و قابلیت به آن اختصاص یابد.

جدول روش‌های ثبت و کاربرد هرکدام

روش ثبت مزیت اصلی محدودیت
افزودن در زمان فعال‌سازی ساده و یکباره نیازمند پاک‌سازی در زمان غیرفعال‌سازی
ثبت از طریق هوک init پایداری در برابر بازنشانی دیتابیس بار اضافی در هر بار بارگذاری
فیلتر user_has_cap انعطاف در منطق بررسی نمایش داده نمی‌شود در رابط مدیریت نقش
add_cap در تعریف نقش پیوند مستقیم با نقش سفارشی نیازمند به‌روزرسانی کد در زمان تغییر
ترکیب چند روش پوشش کامل سناریوهای پیچیده نیازمند طراحی دقیق

اشتباهات رایج در ثبت قابلیت سفارشی

در تجربه‌های عملی، چند اشتباه رایج در ثبت قابلیت سفارشی دیده‌ام که هر کدام پیامدهای متفاوتی دارند.

تعریف قابلیت بدون ثبت در نقش‌ها

شایع‌ترین اشتباه، تعریف قابلیت در کد بدون ثبت آن در نقش‌ها است. در این حالت، قابلیت در فهرست سیستم دیده نمی‌شود و مدیر نمی‌تواند آن را از رابط کاربری اختصاص دهد. حتی اگر افزونه‌ای از قابلیت استفاده کند، ممکن است نتایج غیرمنتظره بازگرداند.

ثبت قابلیت در زمان اشتباه

اگر قابلیت در زمان اشتباه ثبت شود، مثلاً بعد از بارگذاری افزونه‌هایی که از آن استفاده می‌کنند، ممکن است در فهرست دیده نشود. این اشتباه، منبع خطاهای پنهان در پروژه‌های بزرگ است.

نادیده گرفتن پاک‌سازی در زمان حذف افزونه

اگر در زمان حذف افزونه، قابلیت‌های سفارشی از نقش‌ها حذف نشوند، باقی‌مانده‌ها در دیتابیس می‌مانند. این باقی‌مانده‌ها، به بدهی فنی تبدیل می‌شوند و در بازبینی‌های آینده، شناسایی را دشوار می‌کنند.

عدم مستندسازی قابلیت‌ها

اگر قابلیت‌های سفارشی مستند نشوند، در زمان تغییرات تیمی، بازتعریف آنها دشوار می‌شود. مستندسازی باید شامل نام قابلیت، نقش‌های مرتبط، کاربرد و رفتار انتظارشده باشد.

استفاده از نام‌های عمومی و مشترک

اگر نام قابلیت سفارشی با نام قابلیت‌های موجود تداخل داشته باشد، رفتار غیرقابل پیش‌بینی رخ می‌دهد. نام قابلیت باید منحصربه‌فرد و بر پایه پیشوند اختصاصی پروژه باشد. برای مثال، myproject_manage_reports به‌جای manage_reports.

نادیده گرفتن ترتیب اجرای هوک‌ها

اگر قابلیت در هوک با اولویت اشتباه ثبت شود، ممکن است در زمان بررسی دسترسی، در فهرست نباشد. این اشتباه، در پروژه‌هایی که افزونه‌های زیادی دارند، شایع است.

رها کردن قابلیت‌های قدیمی

با گذشت زمان، برخی قابلیت‌ها ممکن است بی‌استفاده شوند اما همچنان در نقش‌ها باقی بمانند. این قابلیت‌های قدیمی، منبع بدهی فنی و افزایش سطح حمله هستند. بازبینی دوره‌ای، بخشی از فرآیند نگهداری است. اگر در این حوزه کار می‌کنید، راهنمای اشتباهات امنیتی رایج وردپرس نکات کاربردی دارد.

پیوند ثبت قابلیت با امنیت و پایش

ثبت قابلیت سفارشی، پیش از آنکه یک جزئیات فنی باشد، یک تصمیم امنیتی است. قابلیتی که ثبت نشده باشد، از پایش خارج است و به یک شکاف پنهان تبدیل می‌شود.

پیوند ثبت با ابزارهای پایش امنیتی

افزونه‌های امنیتی مانند Wordfence و Solid Security، فهرست قابلیت‌ها را از Map داخلی می‌خوانند. اگر قابلیت سفارشی در این Map نباشد، ابزارهای پایش آن را نادیده می‌گیرند و رفتار کاربران مرتبط با آن قابلیت، از پایش خارج می‌شود.

حداقل دسترسی لازم

ثبت دقیق قابلیت، امکان اعمال اصل حداقل دسترسی (Principle of Least Privilege) را فراهم می‌کند. اگر قابلیت ثبت نشده باشد، نمی‌توان آن را به‌طور دقیق به نقش‌های محدود اختصاص داد. نتیجه، افزایش سطح حمله است.

ممیزی دسترسی‌ها

هر دسترسی به یک قابلیت باید قابل ردیابی باشد. اگر قابلیت در Map داخلی نباشد، ممیزی دسترسی‌ها دشوار می‌شود. ثبت دقیق قابلیت، امکان ممیزی دقیق را فراهم می‌کند.

احراز هویت تقویت‌شده برای قابلیت‌های حساس

قابلیت‌های حساس مانند مدیریت مالی یا دسترسی به اطلاعات مشتریان، باید احراز هویت تقویت‌شده داشته باشند. اگر این قابلیت‌ها ثبت نشده باشند، اعمال این لایه دشوار می‌شود. اگر در این حوزه تازه‌کار هستید، راهنمای تفاوت MFA و 2FA مفید است.

انطباق با قوانین حفاظت داده

در حوزه‌های قضایی با قوانین سخت‌گیرانه، ساختار قابلیت‌ها باید با الزامات انطباق هماهنگ باشد. این انطباق شامل ثبت دقیق قابلیت‌ها، ممیزی دسترسی‌ها و امکان بازیابی سریع است. اگر در این حوزه کار می‌کنید، راهنمای انطباق با GDPR در پروژه‌های وردپرسی نکات دقیق‌تری ارائه می‌دهد.

پشتیبان‌گیری و بازیابی

ساختار قابلیت‌ها، بخشی از پیکربندی سایت است و باید در فرآیند پشتیبان‌گیری لحاظ شود. اگر این بخش نادیده گرفته شود، در زمان بازیابی، قابلیت‌ها ممکن است از دست بروند. اگر در این حوزه کار می‌کنید، راهنمای بکاپ‌گیری از وردپرس نکات کاربردی دارد.

لایه مهندسی: تصمیم‌هایی که در سطح کد و معماری گرفته می‌شوند

برای مهندسانی که این ساختار را در مقیاس طراحی می‌کنند، چند نکته اهمیت دارد. اول، تعریف قابلیت‌ها در قالب کد. قابلیت‌های سفارشی باید در یک افزونه اختصاصی و از طریق هوک init ثبت شوند. این رویکرد تضمین می‌کند که قابلیت‌ها با هر استقرار جدید بازسازی شوند و از انحراف پیکربندی جلوگیری می‌کند.

دوم، انتخاب نام‌گذاری دقیق. نام قابلیت باید منحصربه‌فرد، توصیفی و بر پایه پیشوند اختصاصی پروژه باشد. این رویکرد، از تداخل با قابلیت‌های افزونه‌های دیگر جلوگیری می‌کند.

سوم، جدایی قابلیت ثبت‌شده از قابلیت محاسبه‌شده. برخی قابلیت‌ها باید به‌صورت ثابت در نقش‌ها ثبت شوند و برخی دیگر باید در زمان اجرا و بر پایه منطق محاسبه شوند. این تفکیک، ساختار را ساده‌تر و شفاف‌تر می‌کند.

چهارم، استفاده از فیلتر user_has_cap برای موارد پویا. برای قابلیت‌هایی که بر پایه منطق پیچیده تعیین می‌شوند، فیلتر user_has_cap مناسب است. اما این قابلیت‌ها باید در مستندات ثبت شوند تا در زمان بازبینی، نادیده گرفته نشوند.

پنجم، پیوند با فرآیند استقرار. ثبت قابلیت باید بخشی از فرآیند استقرار باشد و پس از هر استقرار، بررسی شود که قابلیت‌ها به‌درستی در محیط Production بازسازی شده‌اند.

ششم، تست خودکار قابلیت‌ها. اگر روی ساختار قابلیت‌ها تغییر می‌دهید، باید تست خودکار داشته باشید که مطمئن شود هر قابلیت در فهرست سیستم وجود دارد و به نقش‌های درست اختصاص یافته است. این تست‌ها می‌توانند بخشی از پایپ‌لاین CI/CD باشند. اگر در این حوزه کار می‌کنید، راهنمای CI/CD برای پروژه‌های وردپرسی نکات کاربردی دارد.

هفتم، مستندسازی معماری. ساختار قابلیت‌ها، نقش‌ها و تصمیمات مرتبط با آن باید مستند شوند. این مستندسازی در زمان بازبینی معماری، از تصمیم‌های دوباره جلوگیری می‌کند.

هشتم، پاک‌سازی در زمان حذف افزونه. اگر افزونه‌ای که قابلیت سفارشی ثبت می‌کند، حذف شود، باید قابلیت‌ها هم از نقش‌ها حذف شوند. این پاک‌سازی، از باقی ماندن قابلیت‌های بی‌استفاده جلوگیری می‌کند.

نهم، پیوند با افزونه‌های مدیریت نقش. اگر از افزونه مدیریت نقش استفاده می‌کنید، باید مطمئن شوید که قابلیت‌های سفارشی در رابط کاربری آن نمایش داده می‌شوند. اگر این نمایش انجام نشود، مدیر نمی‌تواند قابلیت‌ها را به‌درستی مدیریت کند. اگر در این حوزه کار می‌کنید، بهترین افزونه‌های مدیریت کاربران وردپرس گزینه‌های عملی را نشان می‌دهد.

دهم، پایش مستمر. پس از استقرار، باید پایش مستمر روی تغییرات قابلیت‌ها اعمال شود. هر تغییر غیرمنتظره باید هشدار ایجاد کند. این پایش، از سوءاستفاده بی‌صدا جلوگیری می‌کند.

یازدهم، مستندسازی رفتار انتظارشده. برای هر قابلیت سفارشی، باید رفتار انتظارشده مستند شود. برای مثال، اگر قابلیتی به نام approve_refunds تعریف شده، باید مشخص شود که چه کاربرانی باید به آن دسترسی داشته باشند و در چه شرایطی.

دوازدهم، استفاده از ساختار استاندارد افزونه. اگر قابلیت‌ها در یک افزونه اختصاصی تعریف می‌شوند، این افزونه باید ساختار استاندارد وردپرس را رعایت کند. اگر در این حوزه کار می‌کنید، راهنمای ساختار استاندارد افزونه وردپرس نکات دقیق‌تری ارائه می‌دهد.

پرسش‌های پرتکرار درباره قابلیت‌های سفارشی وردپرس

آیا قابلیت سفارشی بدون ثبت کار می‌کند؟

در برخی سناریوها، اگر افزونه‌ای از فیلتر user_has_cap استفاده کند، ممکن است قابلیت به‌صورت پویا اعطا شود. اما در این حالت، قابلیت در فهرست رسمی نمایش داده نمی‌شود و مدیر نمی‌تواند آن را از رابط کاربری اختصاص دهد. بنابراین، ثبت رسمی همیشه توصیه می‌شود.

آیا ثبت قابلیت روی عملکرد سایت اثر می‌گذارد؟

ثبت قابلیت در زمان فعال‌سازی افزونه، اثر محسوسی بر عملکرد ندارد. ثبت از طریق هوک init در هر بار بارگذاری، بار اضافی کوچکی وارد می‌کند که در سایت‌های پرترافیک قابل توجه است. انتخاب روش درست، تعادل بین پایداری و عملکرد را فراهم می‌کند.

آیا می‌توان قابلیت را به چند نقش همزمان اختصاص داد؟

بله. قابلیت می‌تواند به چند نقش اختصاص یابد. اگر کاربری چند نقش داشته باشد، همه قابلیت‌های این نقش‌ها در دسترس او قرار می‌گیرد. این ویژگی، امکان طراحی دقیق دسترسی را فراهم می‌کند.

چگونه قابلیت سفارشی را از یک نقش حذف کنیم؟

با استفاده از تابع remove_cap روی شیء نقش. این کار باید با احتیاط انجام شود، چون ممکن است کاربرانی که از این قابلیت استفاده می‌کردند، دسترسی‌شان از دست برود. پیش از حذف، باید تأثیر آن بررسی شود.

آیا قابلیت‌های سفارشی در سایر افزونه‌ها نمایش داده می‌شوند؟

افزونه‌های مدیریت نقش، فهرست قابلیت‌ها را از Map داخلی می‌خوانند. اگر قابلیت در این Map ثبت شده باشد، در رابط کاربری این افزونه‌ها نمایش داده می‌شود. اگر ثبت نشده باشد، حتی اگر در کد استفاده شود، در رابط کاربری نمایش داده نمی‌شود.

چگونه قابلیت‌های سفارشی را در محیط Staging و Production هماهنگ کنیم؟

با تعریف قابلیت‌ها در قالب کد و از طریق یک افزونه اختصاصی. این رویکرد تضمین می‌کند که با هر استقرار، قابلیت‌ها به‌درستی در محیط Production بازسازی شوند. اگر در این حوزه کار می‌کنید، راهنمای کنترل نقش‌ها و دسترسی‌های وردپرس نکات دقیق‌تری ارائه می‌دهد.

آیا قابلیت‌های سفارشی نیازمند بازبینی دوره‌ای هستند؟

بله. قابلیت‌های سفارشی باید به‌صورت دوره‌ای بازبینی شوند تا مطمئن شوید که هنوز استفاده می‌شوند و به نقش‌های درست اختصاص یافته‌اند. اگر بازبینی انجام نشود، باقی‌مانده‌های بی‌استفاده انباشته می‌شوند.

برای درک عمیق‌تر مفاهیم پایه این حوزه، می‌توانید صفحه Capability-based security را در ویکی‌پدیا ببینید.

اگر روی افزونه سفارشی خود قابلیت‌ها را ثبت کرده‌اید و در فرآیند ثبت با موقعیت غیرمنتظره‌ای روبه‌رو شده‌اید — مثلاً نمایش داده نشدن قابلیت در افزونه مدیریت نقش یا مشکل در زمان بررسی دسترسی — برایم جالب است بدانید کدام بخش بیشترین وقت شما را گرفت. تجربه خودتان را در دیدگاه‌ها بنویسید؛ به‌خصوص اگر راه‌حل متفاوتی برای ثبت قابلیت‌ها پیدا کرده‌اید که می‌تواند برای خواننده بعدی راهگشا باشد.