允许名为‘Backend_User’的角色访问我的插件页面

时间:2020-05-23 作者:Bala Krishnan D

我是插件开发新手,通过遵循WordPress Codex设置的所有插件开发最佳实践,我对开发相当满意。下面的代码描述了角色:WordPress管理员如何访问插件。

管理员在设置中访问插件:SettingsApi。php

public function register()
    {
        if ( ! empty($this->admin_pages) || ! empty($this->admin_subpages)) {
            add_action( \'admin_menu\', array( $this, \'addAdminMenu\' ) );
        }
}
public function addSubPages( array $pages )
    {
        $this->admin_subpages = array_merge( $this->admin_subpages, $pages );

        return $this;
    }

    public function addAdminMenu()
    {
        foreach ( $this->admin_pages as $page ) {
            add_menu_page( $page[\'page_title\'], $page[\'menu_title\'], $page[\'capability\'], $page[\'menu_slug\'], $page[\'callback\'], $page[\'icon_url\'], $page[\'position\'] );
        }

        foreach ( $this->admin_subpages as $page ) {
            add_submenu_page( $page[\'parent_slug\'], $page[\'page_title\'], $page[\'menu_title\'], $page[\'capability\'], $page[\'menu_slug\'], $page[\'callback\'] );
        }
    }

激活时,通过以下代码向WordPress的用户群添加新角色:Activate。php

$result = 
                add_role
                (
                    \'backend_user\',
                    __( \'Plugin Name Backend\', \'testsite\' ),
                    array(
                    \'read\'         => true,  // true allows this capability
                    \'edit_posts\'   => false,
                    \'delete_posts\' => false,
                )
                );
我正在研究如何设置角色的权限backend_user 访问我的SettingApi中的插件页面。php。还有,如果有任何方法可以启用backend_user 要在WordPress登录中访问我的插件页面,请建议。

我在SettingApi中尝试了以下函数。寄存器()下的php

$user = wp_get_current_user();
            if ( in_array( \'backend_user\', (array) $user->roles ) ) {

            add_action( \'admin_menu\', array( $this, \'addAdminMenu\' ) );
            }
不工作。任何帮助都将不胜感激。

2 个回复
最合适的回答,由SO网友:Bala Krishnan D 整理而成

通过页面控制器文件修复了它,在本例中,我使用ZoneTwoController。php到回调,在下面添加额外的数组setSubpages() 对于backend_user 正在启用插件选项视图(adminReport.php)。

\\\\  FILE NAME: Inc\\Base\\ZoneTwoController.php

use Inc\\Api\\SettingsApi;
use Inc\\Base\\BaseController;
use Inc\\Api\\Callbacks\\AdminCallbacks;

\\\\...... Some more public functions goes here .....\\\\

    public function setSubpages()
    {
        $this->subpages = array(

          array(
                \'parent_slug\' => \'my_custom_plugin\', 
                \'page_title\' => \'Backend User Report\', 
                \'menu_title\' => \'Backend User Report\', 
                \'capability\' => \'manage_options\', // this will allow permission for admin.
                \'menu_slug\' => \'admin_bk_report\', // also make sure to use different slug for other role.
                \'callback\' => array( $this->callbacks, \'adminReport\' )
            ), 
            array(
                \'parent_slug\' => \'my_custom_plugin\', 
                \'page_title\' => \'Backend User Report\', 
                \'menu_title\' => \'Backend User Report\', 
                \'capability\' => \'backend_user\', // <----- this will enable the backend user to view the plugin menu. 
                \'menu_slug\' => \'backend_report\', // <------ this should be different from manage_options.
                \'callback\' => array( $this->callbacks, \'adminReport\' ) // you can have different page in case of same file callbacks can be similar, in my case it is same file(adminReport.php).
            ) 
        );
    }

SO网友:Behemoth

向自定义用户角色添加功能

添加功能之前,请参考功能列表和现有用户角色
https://wordpress.org/support/article/roles-and-capabilities/
在没有适当知识/实践经验的情况下添加用户角色可能会导致您的网站出现不同的漏洞,在最坏的情况下,可能会造成后门
If you are interested in solution only then please jump to solution section.

Adding plugin install capabilities:

将解决方案中的代码添加到插件中,如果没有插件,则创建一个新插件。然后粘贴解决方案块中所示的代码,并按照步骤检查功能。

这将允许用户安装插件,并提供上载自定义插件文件的功能,但禁用上载文件功能的情况除外。再一次install_plugins 不会单独激活插件面板activate_plugins 待激活。

Why the same solution don\'t work for you?

是的,你可能得不到想要的结果。这是因为您必须按照这些步骤检查功能。我假设您已经在插件中实现了这一点。

将测试用户角色更改为subscriber或其他内容停用插件激活插件将用户角色更改回自定义角色用户角色存储在数据库中。由于我们已经将其应用于插件激活,因此必须首先重新激活插件以触发添加用户功能。然后删除现有用户角色并重新创建它。

解决方案

//Role Checker Function
function bh_role_exists( $role ) {

  if( ! empty( $role ) ) {
    return $GLOBALS[\'wp_roles\']->is_role( $role );
  }
  
  return false;
}
// Role Removal
function bh_user_role_remove( $role ) {
    if( bh_role_exists( $role ) ) {
        // The \'editor\' role exists!
        remove_role( $role );
    }
    
}

function bh_add_user_role() {
    //Remove the existing role first
    bh_user_role_remove(\'backend_user\');
    
    //Add the role
    add_role(
        \'backend_user\',
        \'Backend User\',
        [
            \'read\'         => true,
            \'edit_posts\'   => true,
            \'install_plugins\' => true,
            \'activate_plugins\' => true,
        ]
    );
}

add_action(\'init\', \'bh_add_user_role\');
Conclusion:
此插件将使用户能够上载自定义插件,通过此插件,用户可以访问任何用户角色。

相关推荐