کاربران وردپرس – بخش سوم: نقش ها و قابلیت های کاربری

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

نقش های کاربری پیش فرض در وردپرس شامل موارد زیر می باشد:

مدیر (Administrator): امکان کنترل همه چیز را در سایت دارد.

ویرایشگر (Editor): امکان انتشار و ویرایش تمامی مطالب را داراست.

نویسنده (Author): امکان انتشار و ویرایش مطالبی که خود ایجاد کرده را دارد.

مشارکت کننده (Contributor): امکان ثبت مطلب را داراست اما نمی تواند آن را منتشر کند.

کاربر عضو سایت (Subscriber): امکان ویرایش پروفایل خود و دسترسی به داشبورد را دارد.

بررسی مجوز کاربر

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

http://codex.wordpress.org/Roles_and_Capabilities

در ادامه به معرفی و بررسی مهمترین توابع برای کنترل مجوز کاربران در وردپرس می پردازیم.

تابع current_user_can

این تابع مجوز اجرای قابلیت مشخص توسط کاربری فعلی را بررسی می نماید و در صورت تایید مجوز اجرا مقدار true و در غیر این صورت مقدار false را برمی گرداند. این تابع دو پارامتر ورودی می پذیرد: پارامتر اول عنوان قابلیت و پارامتر دوم که اختیاری است معمولا آیدی شی که امکان دسترسی کاربر به آن باید بررسی شود.

مثال: نمایش لینک ویرایش در صورت وجود مجوز ویرایش پست برای کاربر

< ?php
             
/* Check if the current user can edit posts. */
if ( current_user_can( 'edit_posts' ) ) {
             
    /* Link to the edit posts page in the admin. */
    echo ' < a href="' . admin_url( 'edit.php' ) . '" > Edit Posts < /a > ';
}
             
? >   

مثال: بررسی مجوز ویرایش پست 100 توسط کاربر فعلی و بروزرسانی متادیتا پست

< ?php
             
/* Check if the current user can edit the specific post. */
if ( current_user_can( 'edit_post', 100 ) {
             
    /* Update the post meta. */
    update_post_meta( 100, 'bmpt_example_meta', 'Example' );
}
             
? >

در صورتی که بخواهید از این تابع در شبکه ای شامل چند سایت (بلاگ) استفاده نمایید می توانید از تابع current_user_for_blog استفاده نمایید. این تابع مشابه تابع قبلی عمل می کند با این تفاوت که آیدی بلاگ را به عنوان پارامتر اول می پذیرد.

<?php
current_user_can_for_blog( $blog_id, 'edit_post', $post->ID );
?>

تابع author_can

این تابع امکان اجرای یک قابلیت بر روی یک پست معین توسط نویسنده آن پست را بررسی می کند و در صورت تایید مجوز انجام کار مقدار true و در غیر این صورت مقدار false برگردانده می شود. این تابع سه پارامتر ورودی می پذیرد: پارامتر اول شی یا آیدی پست، پارامتر دوم نام قابلیت و پارامتر سوم که اختیاری است آیدی شی است که وجود قابلیت برای آن باید بررسی شود.

< ?php
             
/* Check if the post author can publish posts. */
if ( author_can( 100, 'publish_posts' ) ) {
             
    /* Display a message. */
    echo 'The author of this post has publishing access.';
}
             
/* If the author can’t publish posts. */
else {
             
    /* Display a message. */
    echo 'The author of this post cannot publish this post.';
}
             
? >   

تابع user_can

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

هوک map_meta_cap

از این هوک برای ایجاد تغییرات در لیست قابلیت های موجود برای کاربر به منظور انجام عملیات بر روی یک شی معین استفاده می گردد. این هوک بر روی آرایه برگشتی تابع map_meta_cap که قابلیت های یک نقش را به قابلیت های یک شی نگاشت می کند، تغییرات لازم را انجام می دهد. فیلتر این هوک چهار پارامتر می پذیرد: پارامتر اول آرایه ای از قابلیت های کاربر، پارامتر دوم قابلیت جدیدی که باید بررسی گردد، پارامتر سوم آیدی کاربر و پارامتر چهارم آرایه ای از اطلاعات اضافی که به تابع map_meta_cap ارسال می گردد.

<?php
/* Filter the ‘map_meta_cap’ hook. */
add_filter( 'map_meta_cap', 'bmpt_restrict_admin_post_editing', 10, 4 );
             
/* Function for restricting users from editing admin posts. */
function bmpt_restrict_admin_post_editing( $caps, $cap, $user_id, $args ) {
             
    /* If user is trying to edit or delete a post. */
    if ( 'edit_post' == $cap || 'delete_post' == $cap ) {
             
        /* Get the post object. */
        $post = get_post( $args[0] );
             
        /* If an admin is the post author. */
        if ( author_can( $post, 'delete_users' ) ) {
             
            /* Add a capability that only admins might have to the caps array. */
            $caps[] = 'delete_users';
        }
    }
             
    /* Return the array of capabilities. */
    return $caps;
}
             
? >    

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

تابع is_super_admin

این تابع تنها یک پارامتر (آیدی کاربر) به عنوان ورودی می پذیرد و برای تعیین مدیر بودن یک کاربر استفاده می گردد. در صورتی که پارامتر ورودی برای این تابع در نظر گرفته نشود، مدیربودن کاربر فعلی بررسی می گردد. در صورت تایید مدیر بودن کاربر مقدار true و در غیر این صورت مقدار false برگردانده می شود.

مثال: بررسی مدیر بودن کاربر با آیدی 100

< ?php
             
/* Check if the user is an admin. */
if ( is_super_admin( 100 ) ) {
             
    /* Display a message. */
    'echo 'User 100 is an admin. */
}
             
? >

تعریف نقش کاربری جدید

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

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

مثال: افزودن چهار نقش جدید با قابلیت خواندن

< ?php
             
/* Create the forum administrator role. */
add_role( 'forum_administrator', 'Forum Administrator', array( 'read' ) );
             
/* Create the forum moderator role. */
add_role( 'forum_moderator', 'Forum Moderator', array( 'read' ) );
             
/* Create the forum member role. */
add_role( 'forum_member', 'Forum Member', array( 'read' ) );
             
/* Create the forum suspended role. */
add_role( 'forum_suspended', 'Forum Suspended', array( 'read' ) );
             
? >  

حذف یک نقش کاربری

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

< ?php
             
add_action( 'admin_init', 'bmpt_remove_forum_moderator' );
             
function bmpt_remove_forum_moderator() {
             
    /* Get at least one user with the forum moderator role. */
    $users = get_users( array( 'role' = >  'forum_moderator', 'number' = >  1 ) );
             
    /* Check if there are no forum moderators. */
    if ( empty( $users ) ) {
             
        /* Remove the forum moderator role. */
        remove_role( 'forum_moderator' );
    }
}
             
? >  

در مثال فوق، پیش از حذف نقش forum_moderator با کمک تابع get_users و جستجوی کاربرانی که دارای این نقش هستند اطمینان حاصل می کنیم که کاربری دارای این نقش نباشد.

افزودن قابلیت به یک نقش

برای افزودن یک قابلیت به نقش ابتدا باید اطلاعات نقش به صورت شی از دیتابیس دریافت شود. تابع get_role این کار را انجام می دهد. این تابع نام نقش را به عنوان پارامتر ورودی می پذیرد و در صورت یافتن نقش اطلاعات آن را به صورت شی بر می گرداند. در صورت عدم وجود نقش مقدار null برگردانده می شود.

بعد از دریافت اطلاعات نقش، می توان با استفاده از متد add_cap قابلیت مورد نظر را به نقش اضافه کرد.

مثال: افزودن قابلیت انتشار پست به نقش contributor

< ?php
             
/* Get the contributor role. */
$role =  get_role( 'contributor' );
             
/* Check if the role exists. */
if ( !empty( $role ) ) {
             
    /* Add the ‘publish_posts’ capability to the role. */
    $role- > add_cap( 'publish_posts' );
}
             
? >  

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

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

< ?php
             
/* Get the contributor role. */
$role = &amp;  get_role( 'contributor' );
             
/* Check if the role exists. */
if ( !empty( $role ) ) {
             
    /* Remove the ‘publish_posts’ capability to the role. */
    $role- > remove_cap( 'publish_posts' );
}
             
? >   

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

پست های مرتبط

Leave a Comment