38

Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

Embed Size (px)

Citation preview

Page 10: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

WP_User::get_role_caps()$this->allcaps=array();foreach((array)$this->rolesas$role){$the_role=$wp_roles->get_role($role);$this->allcaps=array_merge($this->allcaps,$the_role->capabilities);}

Page 13: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

current_user_can('manage_secret_settings')

add_options_page('SuperSecretSettingsPage',//PageTitle'SecretSettings',//MenuTitle'manage_secret_settings',//Capability'secret-settings',//Slug[$this,'render']//Callbackfunction)

Page 14: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

current_user_can()returncall_user_func_array(array($current_user,'has_cap'),$args);

Page 15: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

WP_User::has_cap()$caps=call_user_func_array('map_meta_cap',$args);

Page 16: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

current_user_can('edit_post',$post_id)case'edit_post':if(in_array($post->post_status,['publish','future'],true)){$caps[]=$post_type->cap->edit_published_posts;}elseif('private'==$post->post_status){$caps[]=$post_type->cap->edit_private_posts;}

Page 18: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

map_meta_cap()add_filter('map_meta_cap','add_approval_requirements',10,4);functionadd_approval_requirement($required_caps,$requested_cap,$user_id,$args){if($requested_cap=='publish_post'){if(!is_approved($args[0])){$required_caps[]='publish_unapproved_posts';}}return$required_caps;}

Page 19: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

add_role()$role=add_role('theme_switcher');

$role->add_cap('read');$role->add_cap('switch_themes');

Page 20: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

add_role()$role=add_role('page_author');

$role->add_cap('read');$role->add_cap('edit_pages');$role->add_cap('publish_pages');$role->add_cap('delete_pages');$role->add_cap('edit_published_pages');$role->add_cap('delete_published_pages');$role->add_cap('upload_files');$role->add_cap('level_1');

Page 21: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

WP_User_Query::prepare_query()if(isset($qv['who'])&&'authors'==$qv['who']&&$blog_id){$qv['meta_key']=$wpdb->get_blog_prefix($blog_id).'user_level';$qv['meta_value']=0;$qv['meta_compare']='!=';}

Page 22: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

add_action('admin_init',function(){if(get_option('my_user_roles_version',0)<1){my_register_roles_version_1();update_option('my_user_roles_version',1);}});

Page 23: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

get_role()$role=get_role('author');

$role->add_cap('edit_pages');$role->add_cap('publish_pages');$role->add_cap('delete_pages');$role->remove_cap('edit_published_posts');$role->remove_cap('delete_published_posts');

Page 25: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

capability_type

current_user_can('edit_stories')

register_post_type('story',[ 'label'=>__('Stories'), //...manymoreargs 'capability_type'=>['story','stories'],]);

Page 26: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

capabilities

current_user_can('special_publish_posts')

register_post_type('story',[ 'label'=>__('Stories'), //...manymoreargs 'capabilities'=>[ 'publish_posts'=>'special_publish_posts', ],]);

Page 27: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

map_meta_cap

current_user_can('edit_post',$story_id)

register_post_type('story',[ 'label'=>__('Stories'), //...manymoreargs 'capability_type'=>['story','stories'], 'map_meta_cap'=>true,]);

Page 29: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

map_meta_cap

add_filter('map_meta_cap','your_mapping_method',10,4)

register_post_type('story',[ 'label'=>__('Stories'), //...manymoreargs 'capability_type'=>['story','stories'], 'map_meta_cap'=>false,]);

Page 30: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

$caps=[ 'read','edit_posts', 'edit_others_posts','edit_private_posts', 'edit_published_posts','publish_posts', 'read_private_posts','delete_posts', 'delete_private_posts','delete_published_posts', 'delete_others_posts','create_posts',];

$pto=get_post_type_object('story');

foreach(['administrator','editor']as$role_name){ $role=get_role($role_name); foreach($capsas$cap){ $role->add_cap($pto->cap->{$cap}); }}

Page 31: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

//Multisitesuperadminhasallcapsbydefinition,//unlessspecificallydenied.if(is_multisite()&&is_super_admin($this->ID)){ if(in_array('do_not_allow',$caps)) returnfalse; returntrue;}

Page 35: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

user_has_capadd_filter('user_has_cap','filter_user_caps',10,4);functionfilter_user_caps($caps_the_user_has,$caps_the_user_needs,$args,$user){ $originally_requested_cap=$args[0]; $user_id=$args[1]; $other_args=array_slice($args,2);//variesper$arg[0]}

Page 37: Right Level, Right Access: Extending User Roles and Permissions to Support Higher Ed Workflows

user_has_capforeach($groupsas$group){$access_level=$group->get_permissions($post_type);if($access_level==Group::PERMISSION_EDITOR||$group->is_assigned_to_post($post_id)){$user_caps[$post_type_object->cap->edit_others_posts]=true;$user_caps[$post_type_object->cap->read_private_posts]=true;$user_caps[$post_type_object->cap->delete_posts]=true;$user_caps[$post_type_object->cap->delete_private_posts]=true;$user_caps[$post_type_object->cap->delete_published_posts]=true;$user_caps[$post_type_object->cap->delete_others_posts]=true;$user_caps[$post_type_object->cap->edit_private_posts]=true;}}