diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt
index 7ef765309..b207c5081 100644
--- a/docs/changelog/7.x.x.txt
+++ b/docs/changelog/7.x.x.txt
@@ -102,6 +102,7 @@
- fix: javascript errors in SQL Form date inputs in IE
- Added optional parameters for DatabaseLinks so that users can setup their
database's with things like LongReadLen, etc.
+ - Added ability to restrict admin console items to specific groups.
7.3.22
- fix: relative links sent out in emails don't work properly
diff --git a/docs/upgrades/upgrade_7.3.22-7.4.0.pl b/docs/upgrades/upgrade_7.3.22-7.4.0.pl
index bede799dc..65e4daa01 100644
--- a/docs/upgrades/upgrade_7.3.22-7.4.0.pl
+++ b/docs/upgrades/upgrade_7.3.22-7.4.0.pl
@@ -37,9 +37,50 @@ addCanStartThreadToCS($session);
addPostCaptchaToCS($session);
addFieldsToDatabaseLinks($session);
addWikiAttachments($session);
+addAdminConsoleGroupSettings($session);
finish($session); # this line required
+#-------------------------------------------------
+# Add the default admin console group settings
+sub addAdminConsoleGroupSettings {
+ my $session = shift;
+ print "\tAdding default admin console group settings... " unless $quiet;
+
+ my %groupDefaults = (
+ groupIdAdminActiveSessions => 3,
+ groupIdAdminAdSpace => 3,
+ groupIdAdminCache => 3,
+ groupIdAdminCommerce => 3,
+ groupIdAdminCron => 3,
+ groupIdAdminDatabaseLink => 3,
+ groupIdAdminGraphics => 3,
+ groupIdAdminGroup => 3,
+ groupIdAdminGroupAdmin => 11,
+ groupIdAdminHelp => 7,
+ groupIdAdminLDAPLink => 3,
+ groupIdAdminLoginHistory => 3,
+ groupIdAdminProductManager => 14,
+ groupIdAdminProfileSettings => 3,
+ groupIdAdminReplacements => 3,
+ groupIdAdminSpectre => 3,
+ groupIdAdminStatistics => 3,
+ groupIdAdminSubscription => 3,
+ groupIdAdminTransactionLog => 3,
+ groupIdAdminUser => 3,
+ groupIdAdminUserAdd => 11,
+ groupIdAdminVersionTag => 12,
+ groupIdAdminWorkflow => 'pbgroup000000000000015',
+ groupIdAdminWorkflowRun => 3,
+ );
+
+ for my $setting (keys %groupDefaults) {
+ $session->setting->add($setting, $groupDefaults{$setting});
+ }
+
+ print "DONE!\n" unless $quiet;
+}
+
#-------------------------------------------------
sub addWikiAttachments {
diff --git a/lib/WebGUI/AdminConsole.pm b/lib/WebGUI/AdminConsole.pm
index 704a394d8..50b8f2f92 100644
--- a/lib/WebGUI/AdminConsole.pm
+++ b/lib/WebGUI/AdminConsole.pm
@@ -69,13 +69,24 @@ sub _formatFunction {
$url = $self->session->url->page("op=".$function->{op});
}
my $i18n = WebGUI::International->new($self->session);
+
+ # Determine if the user can use this control
+ my $canUse = 0;
+ if ($function->{class} && $function->{class}->can('canView')) {
+ eval { require $function->{class}; };
+ $canUse = $function->{class}->can('canView')->($self->session);
+ }
+ else {
+ $canUse = $self->session->user->isInGroup( $function->{group} );
+ }
+
return {
- title=>$i18n->get($function->{title}{id}, $function->{title}{namespace}),
- icon=>$self->session->url->extras("/adminConsole/".$function->{icon}),
- 'icon.small'=>$self->session->url->extras("adminConsole/small/".$function->{icon}),
- url=>$url,
- canUse=>$self->session->user->isInGroup($function->{group}),
- isCurrentOpFunc=>($self->session->form->process("op") eq $function->{op} || $self->session->form->process("func") eq $function->{func})
+ title => $i18n->get($function->{title}{id}, $function->{title}{namespace}),
+ icon => $self->session->url->extras("/adminConsole/".$function->{icon}),
+ 'icon.small' => $self->session->url->extras("adminConsole/small/".$function->{icon}),
+ url => $url,
+ canUse => $canUse,
+ isCurrentOpFunc => ($self->session->form->process("op") eq $function->{op} || $self->session->form->process("func") eq $function->{func})
};
}
@@ -188,239 +199,239 @@ sub getAdminFunction {
my $id = shift;
my $testing = shift;
my $functions = { # at some point in the future we'll need to make this pluggable/configurable
- "spectre"=>{
- title=>{
- id=>"spectre",
- namespace=>"Spectre"
+ "spectre" => {
+ title => {
+ id => "spectre",
+ namespace => "Spectre",
},
- icon=>"spectre.gif",
- op=>"spectreStatus",
- group=>"3"
+ icon => "spectre.gif",
+ op => "spectreStatus",
+ class => "WebGUI::Operation::Spectre",
},
- "assets"=>{
- title=>{
- id=>"assets",
- namespace=>"Asset"
+ "assets" => {
+ title => {
+ id => "assets",
+ namespace => "Asset",
},
- icon=>"assets.gif",
- func=>"manageAssets",
- group=>"12"
+ icon => "assets.gif",
+ func => "manageAssets",
+ group => "12",
},
- "versions"=>{
- title=>{
- id=>"version tags",
- namespace=>"VersionTag"
+ "versions" => {
+ title => {
+ id => "version tags",
+ namespace => "VersionTag",
},
- icon=>"versionTags.gif",
- op=>"manageVersions",
- group=>"12"
+ icon => "versionTags.gif",
+ op => "manageVersions",
+ class => "WebGUI::Operation::VersionTag",
},
- "workflow"=>{
- title=>{
- id=>"topicName",
- namespace=>"Workflow"
+ "workflow" => {
+ title => {
+ id => "topicName",
+ namespace => "Workflow",
},
- icon=>"workflow.gif",
- op=>"manageWorkflows",
- group=>"pbgroup000000000000015"
+ icon => "workflow.gif",
+ op => "manageWorkflows",
+ class => 'WebGUI::Operation::Workflow',
},
- "adSpace"=>{
- title=>{
- id=>"topicName",
- namespace=>"AdSpace"
+ "adSpace" => {
+ title => {
+ id => "topicName",
+ namespace => "AdSpace",
},
- icon=>"advertising.gif",
- op=>"manageAdSpaces",
- group=>"pbgroup000000000000017"
+ icon => "advertising.gif",
+ op => "manageAdSpaces",
+ class => 'WebGUI::Operation::AdSpace',
},
- "cron"=>{
- title=>{
- id=>"topicName",
- namespace=>"Workflow_Cron"
+ "cron" => {
+ title => {
+ id => "topicName",
+ namespace => "Workflow_Cron",
},
- icon=>"cron.gif",
- op=>"manageCron",
- group=>"3"
+ icon => "cron.gif",
+ op => "manageCron",
+ class => 'WebGUI::Operation::Cron',
},
- "users"=>{
- title=>{
- id=>"149",
- namespace=>"WebGUI"
+ "users" => {
+ title => {
+ id => "149",
+ namespace => "WebGUI",
},
- icon=>"users.gif",
- op=>"listUsers",
- group=>"11"
+ icon => "users.gif",
+ op => "listUsers",
+ class => 'WebGUI::Operation::User',
},
- "clipboard"=>{
- title=>{
- id=>"948",
- namespace=>"WebGUI"
+ "clipboard" => {
+ title => {
+ id => "948",
+ namespace => "WebGUI",
},
- icon=>"clipboard.gif",
- func=>"manageClipboard",
- group=>"12"
+ icon => "clipboard.gif",
+ func => "manageClipboard",
+ group => "12",
},
- "trash"=>{
- title=>{
- id=>"trash",
- namespace=>"WebGUI"
+ "trash" => {
+ title => {
+ id => "trash",
+ namespace => "WebGUI",
},
- icon=>"trash.gif",
- func=>"manageTrash",
- group=>"12"
+ icon => "trash.gif",
+ func => "manageTrash",
+ group => "12",
},
- "databases"=>{
- title=>{
- id=>"databases",
- namespace=>"WebGUI"
+ "databases" => {
+ title => {
+ id => "databases",
+ namespace => "WebGUI",
},
- icon=>"databases.gif",
- op=>"listDatabaseLinks",
- group=>"3"
+ icon => "databases.gif",
+ op => "listDatabaseLinks",
+ class => 'WebGUI::Operation::DatabaseLink',
},
- "ldapconnections"=>{
- title=>{
- id=>"ldapconnections",
- namespace=>"AuthLDAP"
+ "ldapconnections" => {
+ title => {
+ id => "ldapconnections",
+ namespace => "AuthLDAP",
},
- icon=>"ldap.gif",
- op=>"listLDAPLinks",
- group=>"3"
+ icon => "ldap.gif",
+ op => "listLDAPLinks",
+ class => 'WebGUI::Operation::LDAPLink',
},
- "groups"=>{
- title=>{
- id=>"89",
- namespace=>"WebGUI"
+ "groups" => {
+ title => {
+ id => "89",
+ namespace => "WebGUI",
},
- icon=>"groups.gif",
- op=>"listGroups",
- group=>"11"
+ icon => "groups.gif",
+ op => "listGroups",
+ class => 'WebGUI::Operation::Group',
},
- "settings"=>{
- title=>{
- id=>"settings",
- namespace=>"WebGUI"
+ "settings" => {
+ title => {
+ id => "settings",
+ namespace => "WebGUI",
},
- icon=>"settings.gif",
- op=>"editSettings",
- group=>"3"
+ icon => "settings.gif",
+ op => "editSettings",
+ class => 'WebGUI::Operation::Settings',
},
- "help"=>{
- title=>{
- id=>"help",
- namespace=>"WebGUI"
+ "help" => {
+ title => {
+ id => "help",
+ namespace => "WebGUI",
},
- icon=>"help.gif",
- op=>"viewHelpIndex",
- group=>"7"
+ icon => "help.gif",
+ op => "viewHelpIndex",
+ class => 'WebGUI::Operation::Help',
},
- "statistics"=>{
- title=>{
- id=>"437",
- namespace=>"WebGUI"
+ "statistics" => {
+ title => {
+ id => "437",
+ namespace => "WebGUI",
},
- icon=>"statistics.gif",
- op=>"viewStatistics",
- group=>"3"
+ icon => "statistics.gif",
+ op => "viewStatistics",
+ class => 'WebGUI::Operation::Statistics',
},
- "contentProfiling"=>{
- title=>{
- id=>"content profiling",
- namespace=>"Asset"
+ "contentProfiling" => {
+ title => {
+ id => "content profiling",
+ namespace => "Asset",
},
- icon=>"contentProfiling.gif",
- func=>"manageMetaData",
- group=>"4"
+ icon => "contentProfiling.gif",
+ func => "manageMetaData",
+ group => "4",
},
- "contentFilters"=>{
- title=>{
- id=>"content filters",
- namespace=>"WebGUI"
+ "contentFilters" => {
+ title => {
+ id => "content filters",
+ namespace => "WebGUI",
},
- icon=>"contentFilters.gif",
- op=>"listReplacements",
- group=>"3"
+ icon => "contentFilters.gif",
+ op => "listReplacements",
+ class => 'WebGUI::Operation::Replacements',
},
- "userProfiling"=>{
- title=>{
- id=>"user profiling",
- namespace=>"WebGUIProfile"
+ "userProfiling" => {
+ title => {
+ id => "user profiling",
+ namespace => "WebGUIProfile",
},
- icon=>"userProfiling.gif",
- op=>"editProfileSettings",
- group=>"3"
+ icon => "userProfiling.gif",
+ op => "editProfileSettings",
+ class => 'WebGUI::Operation::ProfileSettings',
},
- "loginHistory"=>{
- title=>{
- id=>"426",
- namespace=>"WebGUI"
+ "loginHistory" => {
+ title => {
+ id => "426",
+ namespace => "WebGUI",
},
- icon=>"loginHistory.gif",
- op=>"viewLoginHistory",
- group=>"3"
+ icon => "loginHistory.gif",
+ op => "viewLoginHistory",
+ class => 'WebGUI::Operation::LoginHistory',
},
- "inbox"=>{
- title=>{
- id=>"159",
- namespace=>"WebGUI"
+ "inbox" => {
+ title => {
+ id => "159",
+ namespace => "WebGUI",
},
- icon=>"inbox.gif",
- op=>"viewInbox",
- group=>"2"
+ icon => "inbox.gif",
+ op => "viewInbox",
+ group => "2",
},
- "activeSessions"=>{
- title=>{
- id=>"425",
- namespace=>"WebGUI"
+ "activeSessions" => {
+ title => {
+ id => "425",
+ namespace => "WebGUI",
},
- icon=>"activeSessions.gif",
- op=>"viewActiveSessions",
- group=>"3"
+ icon => "activeSessions.gif",
+ op => "viewActiveSessions",
+ class => 'WebGUI::Operation::ActiveSessions',
},
- "commerce"=>{
- title=>{
- id=>"commerce settings",
- namespace=>"Commerce"
+ "commerce" => {
+ title => {
+ id => "commerce settings",
+ namespace => "Commerce",
},
- icon=>"commerce.gif",
- op=>"editCommerceSettings",
- group=>"3"
+ icon => "commerce.gif",
+ op => "editCommerceSettings",
+ class => 'WebGUI::Operation::Commerce',
},
- "subscriptions"=>{
- title=>{
- id=>"manage subscriptions",
- namespace=>"Subscription"
+ "subscriptions" => {
+ title => {
+ id => "manage subscriptions",
+ namespace => "Subscription",
},
- icon=>"subscriptions.gif",
- op=>"listSubscriptions",
- group=>"3"
+ icon => "subscriptions.gif",
+ op => "listSubscriptions",
+ class => 'WebGUI::Operation::Subscription',
},
- "productManager"=>{
- title=>{
- id=>"manage products",
- namespace=>"ProductManager"
+ "productManager" => {
+ title => {
+ id => "manage products",
+ namespace => "ProductManager",
},
- icon=>"productManager.gif",
- op=>"listProducts",
- group=>"14"
+ icon => "productManager.gif",
+ op => "listProducts",
+ class => 'WebGUI::Operation::ProductManager',
},
- "cache"=>{
- title=>{
- id=>"manage cache",
- namespace=>"WebGUI"
- },
- icon=>"cache.gif",
- op=>"manageCache",
- group=>"3"
- },
- "graphics"=>{
- title=>{
- id=>"manage graphics",
- namespace=>"Graphics",
+ "cache" => {
+ title => {
+ id => "manage cache",
+ namespace => "WebGUI",
+ },
+ icon => "cache.gif",
+ op => "manageCache",
+ class => 'WebGUI::Operation::Cache',
+ },
+ "graphics" => {
+ title => {
+ id => "manage graphics",
+ namespace => "Graphics",,
},
- icon=>"graphics.gif",
- op=>"listGraphicsOptions",
- group=>"3",
+ icon => "graphics.gif",
+ op => "listGraphicsOptions",
+ class => 'WebGUI::Operation::Graphics',
},
};
return $functions if $testing;
diff --git a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm
index bc1960573..6570a0d78 100644
--- a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm
+++ b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm
@@ -163,7 +163,6 @@ sub _acWrapper {
my $title = shift;
my $i18n = WebGUI::International->new($self->session,'Asset_EventManagementSystem');
my $ac = $self->getAdminConsole;
- unless $ac->getHelp;
$ac->addSubmenuItem($self->getUrl('func=search'),$i18n->get("manage events"));
$ac->addSubmenuItem($self->getUrl('func=manageEventMetadata'), $i18n->get('manage event metadata'));
$ac->addSubmenuItem($self->getUrl('func=managePrereqSets'), $i18n->get('manage prerequisite sets'));
diff --git a/lib/WebGUI/Operation/ActiveSessions.pm b/lib/WebGUI/Operation/ActiveSessions.pm
index 4b651b37f..c85fc4624 100644
--- a/lib/WebGUI/Operation/ActiveSessions.pm
+++ b/lib/WebGUI/Operation/ActiveSessions.pm
@@ -26,6 +26,21 @@ Operation handler for displaying and killing active sessions.
=cut
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the given user is allowed to use this operation. user must be
+a WebGUI::User object. By default, checks the current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminActiveSessions") );
+}
+
#-------------------------------------------------------------------
=head2 www_killSession ( )
@@ -39,7 +54,7 @@ $session->form->process("sid"). Afterwards, it calls www_viewActiveSessions.
sub www_killSession {
my $session = shift;
return www_viewActiveSessions($session) if $session->form->process("sid") eq $session->var->get("sessionId");
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly unless canView($session);
$session->db->write("delete from userSession where sessionId=?",[$session->form->process("sid")]);
$session->db->write("delete from userSessionScratch where sessionId=?", [$session->form->process("sid")]);
return www_viewActiveSessions($session);
@@ -55,8 +70,8 @@ delete (kill) each one via www_killSession
=cut
sub www_viewActiveSessions {
- my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ my $session = shift;
+ return $session->privilege->adminOnly unless canView($session);
my ($output, $p, @row, $i, $sth, %data);
tie %data, 'Tie::CPHash';
$sth = $session->db->read("select users.username,users.userId,userSession.sessionId,userSession.expires,
diff --git a/lib/WebGUI/Operation/AdSpace.pm b/lib/WebGUI/Operation/AdSpace.pm
index 99325bb83..e2507e295 100644
--- a/lib/WebGUI/Operation/AdSpace.pm
+++ b/lib/WebGUI/Operation/AdSpace.pm
@@ -28,6 +28,21 @@ Operation handler for advertising functions.
=cut
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user is allowed to use this operation. user defaults to
+the current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminAdSpace") );
+}
+
#-------------------------------------------------------------------
=head2 www_clickAd ( )
@@ -55,7 +70,7 @@ Deletes an ad.
sub www_deleteAd {
my $session = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup("pbgroup000000000000017"));
+ return $session->privilege->insufficient unless canView($session);
WebGUI::AdSpace::Ad->new($session, $session->form->param("adId"))->delete;
return www_editAdSpace($session);
}
@@ -70,7 +85,7 @@ Deletes an ad space.
sub www_deleteAdSpace {
my $session = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup("pbgroup000000000000017"));
+ return $session->privilege->insufficient unless canView($session);
WebGUI::AdSpace->new($session, $session->form->param("adSpaceId"))->delete;
return www_manageAdSpaces($session);
}
@@ -85,7 +100,7 @@ Displays form for editing an ad.
sub www_editAd {
my $session = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup("pbgroup000000000000017"));
+ return $session->privilege->insufficient unless canView($session);
my $id = $session->form->param("adId") || "new";
my $ac = WebGUI::AdminConsole->new($session,"adSpace");
my $i18n = WebGUI::International->new($session,"AdSpace");
@@ -224,7 +239,7 @@ The save method for www_editAd()
sub www_editAdSave {
my $session = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup("pbgroup000000000000017"));
+ return $session->privilege->insufficient unless canView($session);
my %properties = (
type=>$session->form->process("type", "selectBox"),
url=>$session->form->process("url", "url"),
@@ -265,7 +280,7 @@ Edit or add an ad space form.
sub www_editAdSpace {
my $session = shift;
my $adSpace = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup("pbgroup000000000000017"));
+ return $session->privilege->insufficient unless canView($session);
my $id;
my $i18n = WebGUI::International->new($session,"AdSpace");
my $ac = WebGUI::AdminConsole->new($session,"adSpace");
@@ -346,7 +361,7 @@ Save the www_editAdSpace method.
sub www_editAdSpaceSave {
my $session = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup("pbgroup000000000000017"));
+ return $session->privilege->insufficient unless canView($session);
my %properties = (
name=>$session->form->process("name", "text"),
title=>$session->form->process("title", "text"),
@@ -374,7 +389,7 @@ Manage ad spaces.
sub www_manageAdSpaces {
my $session = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup("pbgroup000000000000017"));
+ return $session->privilege->insufficient unless canView($session);
my $ac = WebGUI::AdminConsole->new($session,"adSpace");
my $i18n = WebGUI::International->new($session,"AdSpace");
my $output = "";
diff --git a/lib/WebGUI/Operation/Cache.pm b/lib/WebGUI/Operation/Cache.pm
index 735f40b8d..e12f5d470 100644
--- a/lib/WebGUI/Operation/Cache.pm
+++ b/lib/WebGUI/Operation/Cache.pm
@@ -45,19 +45,34 @@ is looked up in the i18n table in the WebGUI namespace.
=cut
sub _submenu {
- my $session = shift;
- my $workarea = shift;
- my $title = shift;
- my $i18n = WebGUI::International->new($session);
- $title = $i18n->get($title) if ($title);
- my $ac = WebGUI::AdminConsole->new($session,"cache");
- if ($session->setting->get("trackPageStatistics")) {
- $ac->addSubmenuItem( $session->url->page('op=manageCache'), $i18n->get('manage cache'));
- }
- return $ac->render($workarea, $title);
+ my $session = shift;
+ my $workarea = shift;
+ my $title = shift;
+ my $i18n = WebGUI::International->new($session);
+ $title = $i18n->get($title) if ($title);
+ my $ac = WebGUI::AdminConsole->new($session,"cache");
+ if ($session->setting->get("trackPageStatistics")) {
+ $ac->addSubmenuItem( $session->url->page('op=manageCache'), $i18n->get('manage cache'));
+ }
+ return $ac->render($workarea, $title);
}
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user can use this Operation. user defaults to the current
+user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminCache") );
+}
+
#-------------------------------------------------------------------
=head2 www_flushCache ( duration )
@@ -74,11 +89,13 @@ Text description of how long the subscription lasts.
=cut
sub www_flushCache {
- my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
- my $cache = WebGUI::Cache->new($session,);
- $cache->flush;
- return www_manageCache($session);
+ my $session = shift;
+ return $session->privilege->adminOnly unless canView($session);
+
+ # Flush the cache
+ WebGUI::Cache->new($session)->flush;
+
+ return www_manageCache($session);
}
#-------------------------------------------------------------------
@@ -91,24 +108,25 @@ provides an option to clear the cache.
=cut
sub www_manageCache {
- my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
- my ($output, $data);
- my $cache = WebGUI::Cache->new($session);
- my $flushURL = $session->url->page('op=flushCache');
- my $i18n = WebGUI::International->new($session);
- $output .= '
';
- $output .= '| '.ref($cache).' |
';
- $output .= ''.$cache->stats.' |
';
- $output .= '| '.
- WebGUI::Form::button($session,{
- value=>$i18n->get("clear cache"),
- extras=>qq{onclick="document.location.href='$flushURL';"},
- }).
- ' |
';
+ my $session = shift;
+ return $session->privilege->adminOnly unless canView($session);
+ my $cache = WebGUI::Cache->new($session);
+ my $flushURL = $session->url->page('op=flushCache');
+ my $i18n = WebGUI::International->new($session);
+ my $output
+ = ''
+ . '| '.ref($cache).' |
'
+ . ''.$cache->stats.' |
'
+ . '| '
+ . WebGUI::Form::button($session, {
+ value => $i18n->get("clear cache"),
+ extras => qq{onclick="document.location.href='$flushURL';"},
+ })
+ . ' |
'
+ . '
'
+ ;
- $output .= "
";
- return _submenu($session,$output);
+ return _submenu($session,$output);
}
diff --git a/lib/WebGUI/Operation/Commerce.pm b/lib/WebGUI/Operation/Commerce.pm
index ca71bd042..86df39dfc 100644
--- a/lib/WebGUI/Operation/Commerce.pm
+++ b/lib/WebGUI/Operation/Commerce.pm
@@ -42,17 +42,16 @@ The i18n key of the title of this workarea.
=cut
sub _submenu {
- my $session = shift;
- my $i18n = WebGUI::International->new($session, "Commerce");
-
- my $workarea = shift;
- my $title = shift;
- $title = $i18n->get($title) if ($title);
- my $ac = WebGUI::AdminConsole->new($session,"commerce");
- $ac->addSubmenuItem($session->url->page('op=editCommerceSettings'), $i18n->get('manage commerce settings'));
- $ac->addSubmenuItem($session->url->page('op=listTransactions'), $i18n->get('list transactions'));
- $ac->addSubmenuItem($session->url->page('op=listPendingTransactions'), $i18n->get('list pending transactions'));
- return $ac->render($workarea, $title);
+ my $session = shift;
+ my $i18n = WebGUI::International->new($session, "Commerce");
+ my $workarea = shift;
+ my $title = shift;
+ $title = $i18n->get($title) if ($title);
+ my $ac = WebGUI::AdminConsole->new($session,"commerce");
+ $ac->addSubmenuItem($session->url->page('op=editCommerceSettings'), $i18n->get('manage commerce settings'));
+ $ac->addSubmenuItem($session->url->page('op=listTransactions'), $i18n->get('list transactions'));
+ $ac->addSubmenuItem($session->url->page('op=listPendingTransactions'), $i18n->get('list pending transactions'));
+ return $ac->render($workarea, $title);
}
#-------------------------------------------------------------------
@@ -64,9 +63,9 @@ A wrapper around _clearShippingScratch and _clearPaymentScratch.
=cut
sub _clearCheckoutScratch {
- my $session = shift;
- _clearShippingScratch($session);
- _clearPaymentScratch($session);
+ my $session = shift;
+ _clearShippingScratch($session);
+ _clearPaymentScratch($session);
}
#-------------------------------------------------------------------
@@ -78,8 +77,8 @@ Clears the C scratch variable.
=cut
sub _clearPaymentScratch {
- my $session = shift;
- $session->scratch->delete('paymentGateway');
+ my $session = shift;
+ $session->scratch->delete('paymentGateway');
}
#-------------------------------------------------------------------
@@ -162,6 +161,21 @@ sub _validateState {
return $state;
}
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user can administrate this operation. user defaults to
+the current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminCommerce") );
+}
+
#-------------------------------------------------------------------
=head2 www_addToCart ( $session )
@@ -535,8 +549,7 @@ sub www_checkoutSubmit {
=head2 www_completePendingTransaction ( $session )
-You must be in group Admin (3) to execute the subroutine. Completes
-the transaction specified in the form variable C by calling
+Completes the transaction specified in the form variable C by calling
WebGUI::Commerce::Transaction->completeTransaction. Returns the user
to the C operation.
@@ -544,7 +557,7 @@ to the C operation.
sub www_completePendingTransaction {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly unless canView($session);
WebGUI::Commerce::Transaction->new($session, $session->form->process("tid"))->completeTransaction;
@@ -581,8 +594,7 @@ transaction, but only if the plugin's C returns true.
sub www_confirmTransaction {
my $session = shift;
- my($plugin, %var);
- $plugin = WebGUI::Commerce::Payment->load($session, $session->form->process("pg","className"));
+ my $plugin = WebGUI::Commerce::Payment->load($session, $session->form->process("pg","className"));
if ($plugin->confirmTransaction) {
WebGUI::Commerce::Transaction->new($session, $plugin->getTransactionId)->completeTransaction;
@@ -609,8 +621,6 @@ sub www_deleteCartItem {
=head2 www_editCommerceSettings ( $session )
-Only users in group Admin (3) can execute the subroutine.
-
Site wide setting for commerce, including payment plugins, shipping plugins
and templates.
@@ -623,17 +633,17 @@ sub www_editCommerceSettings {
my (%tabs, $tabform, $currentPlugin, $ac, $jscript, $i18n,
$paymentPlugin, @paymentPlugins, %paymentPlugins, @failedPaymentPlugins, $plugin,
$shippingPlugin, @shippingPlugins, %shippingPlugins, @failedShippingPlugins);
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly unless canView($session);
$i18n = WebGUI::International->new($session, 'Commerce');
tie %tabs, 'Tie::IxHash';
%tabs = (
- general=>{label=>$i18n->get('general tab')},
- payment=>{label=>$i18n->get('payment tab')},
- shipping=>{label=>$i18n->get('shipping tab')},
- salesTax=>{label=>$i18n->get('salesTax tab')},
- );
+ general=>{label=>$i18n->get('general tab')},
+ payment=>{label=>$i18n->get('payment tab')},
+ shipping=>{label=>$i18n->get('shipping tab')},
+ salesTax=>{label=>$i18n->get('salesTax tab')},
+ );
$paymentPlugin = $session->config->get("paymentPlugins")->[0];
$shippingPlugin = $session->config->get("shippingPlugins")->[0];
@@ -794,8 +804,6 @@ sub www_editCommerceSettings {
=head2 www_editCommerceSettingsSave ( $session )
-Only users in group Admin (3) can execute the subroutine.
-
Form post processor for C. Plugin
configuration data is stored in a special table for security and all
other settings in the WebGUI settings table for easy access.
@@ -806,7 +814,7 @@ Returns the user to C.
sub www_editCommerceSettingsSave {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
PARAM: foreach ($session->form->param) {
@@ -845,7 +853,7 @@ links so the Admin can complete any pending transaction.
sub www_listPendingTransactions {
my $session = shift;
my ($p, $transactions, $output, $properties, $i18n);
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
$i18n = WebGUI::International->new($session, "Commerce");
@@ -894,7 +902,7 @@ sub www_listTransactions {
my $session = shift;
my ($output, %criteria, $transaction, @transactions);
- return $session->privilege->insufficient unless ($session->user->isInGroup(3));
+ return $session->privilege->insufficient unless canView($session);
my $i18n = WebGUI::International->new($session, 'TransactionLog');
diff --git a/lib/WebGUI/Operation/Cron.pm b/lib/WebGUI/Operation/Cron.pm
index 28d50a05d..84ba93eb2 100644
--- a/lib/WebGUI/Operation/Cron.pm
+++ b/lib/WebGUI/Operation/Cron.pm
@@ -29,6 +29,21 @@ Operation handler for managing scheduler activities.
=cut
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user can administrate this operation. user defaults to
+the current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminCron") );
+}
+
#-------------------------------------------------------------------
=head2 www_deleteCronJob ( )
@@ -38,11 +53,11 @@ Deletes a cron job.
=cut
sub www_deleteCronJob {
- my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
- my $cron = WebGUI::Workflow::Cron->new($session, $session->form->get("id"));
- $cron->delete if defined $cron;
- return www_manageCron($session);
+ my $session = shift;
+ return $session->privilege->adminOnly unless canView($session);
+ my $cron = WebGUI::Workflow::Cron->new($session, $session->form->get("id"));
+ $cron->delete if defined $cron;
+ return www_manageCron($session);
}
#-------------------------------------------------------------------
@@ -55,7 +70,7 @@ Displays an edit form for a cron job.
sub www_editCronJob {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly unless canView($session);
my $i18n = WebGUI::International->new($session, "Workflow_Cron");
my $cron = WebGUI::Workflow::Cron->new($session, $session->form->get("id"));
my $f = WebGUI::HTMLForm->new($session);
@@ -180,7 +195,7 @@ Saves the results of www_editCronJob()
sub www_editCronJobSave {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly unless canView($session);
if ($session->form->get("id") eq "new") {
WebGUI::Workflow::Cron->create($session,{
monthOfYear=>$session->form->get("monthOfYear"),
@@ -223,7 +238,7 @@ Display a list of the scheduler activities.
sub www_manageCron {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly unless canView($session);
my $i18n = WebGUI::International->new($session, "Workflow_Cron");
my $output = '';
my $rs = $session->db->read("select taskId, title, concat(minuteOfHour, ' ', hourOfDay, ' ', dayOfMonth, ' ', monthOfYear, ' ', dayOfWeek), enabled from WorkflowSchedule");
@@ -256,7 +271,7 @@ sub www_runCronJob {
my $session = shift;
$session->http->setMimeType("text/plain");
$session->http->setCacheControl("none");
- unless (isInSubnet($session->env->get("REMOTE_ADDR"), $session->config->get("spectreSubnets")) || $session->user->isInGroup("3")) {
+ unless (isInSubnet($session->env->get("REMOTE_ADDR"), $session->config->get("spectreSubnets")) || canView($session)) {
$session->errorHandler->security("make a Spectre cron job runner request, but we're only allowed to accept requests from ".join(",",@{$session->config->get("spectreSubnets")}).".");
return "error";
}
diff --git a/lib/WebGUI/Operation/DatabaseLink.pm b/lib/WebGUI/Operation/DatabaseLink.pm
index 0b0855853..344303c26 100644
--- a/lib/WebGUI/Operation/DatabaseLink.pm
+++ b/lib/WebGUI/Operation/DatabaseLink.pm
@@ -55,41 +55,57 @@ sub _submenu {
$ac->addSubmenuItem($session->url->page('op=editDatabaseLink;dlid=new'), $i18n->get(982));
my $dlid = $session->form->process("dlid");
if (($session->form->process("op") eq "editDatabaseLink" && $dlid ne "new") || $session->form->process("op") eq "deleteDatabaseLink") {
- $ac->addSubmenuItem($session->url->page('op=editDatabaseLink;dlid='.$dlid), $i18n->get(983));
- $ac->addSubmenuItem($session->url->page('op=copyDatabaseLink;dlid='.$dlid), $i18n->get(984));
- $ac->addConfirmedSubmenuItem($session->url->page("op=deleteDatabaseLinkConfirm;dlid=".$dlid), $i18n->get(985), $i18n->get(988));
- $ac->addSubmenuItem($session->url->page('op=listDatabaseLinks'), $i18n->get(986));
+ $ac->addSubmenuItem($session->url->page('op=editDatabaseLink;dlid='.$dlid), $i18n->get(983));
+ $ac->addSubmenuItem($session->url->page('op=copyDatabaseLink;dlid='.$dlid), $i18n->get(984));
+ $ac->addConfirmedSubmenuItem($session->url->page("op=deleteDatabaseLinkConfirm;dlid=".$dlid), $i18n->get(985), $i18n->get(988));
+ $ac->addSubmenuItem($session->url->page('op=listDatabaseLinks'), $i18n->get(986));
}
return $ac->render($workarea, $title);
}
-=head2 www_copyDatabaseLink ( $session )
+#----------------------------------------------------------------------------
-Copies the requested database link in the form variable C if the user
-is in group Admin (3). Returns the user to the List Database Links screen.
+=head2 canView ( session [, user] )
+
+Returns true if the user can administrate this operation. user defaults to
+the current user.
=cut
-#-------------------------------------------------------------------
-sub www_copyDatabaseLink {
- my $session = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup(3));
- WebGUI::DatabaseLink->new($session,$session->form->process("dlid"))->copy;
- return www_listDatabaseLinks($session);
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminDatabaseLink") );
}
+#-------------------------------------------------------------------
+
+=head2 www_copyDatabaseLink ( $session )
+
+Copies the requested database link in the form variable C if the user
+is in the correct group. Returns the user to the List Database Links screen.
+
+=cut
+
+sub www_copyDatabaseLink {
+ my $session = shift;
+ return $session->privilege->insufficient unless canView($session);
+ WebGUI::DatabaseLink->new($session,$session->form->process("dlid"))->copy;
+ return www_listDatabaseLinks($session);
+}
+
+#-------------------------------------------------------------------
+
=head2 www_deleteDatabaseLink ( $session )
Requests that the user confirm the deletion of the database link in
-the form variable C. Returns Insufficient privilege if the
-user is not in group Admin (3).
+the form variable C.
=cut
-#-------------------------------------------------------------------
sub www_deleteDatabaseLink {
my $session = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup(3));
+ return $session->privilege->insufficient unless canView($session);
return $session->privilege->vitalComponent if ($session->form->process("dlid") eq '0');
my $i18n = WebGUI::International->new($session);
my ($output);
@@ -102,6 +118,8 @@ sub www_deleteDatabaseLink {
return _submenu($session,$output,"987");
}
+#-------------------------------------------------------------------
+
=head2 www_deleteDatabaseLinkConfirm ( $session )
Deletes the requested database link in the form variable C if the user
@@ -112,16 +130,17 @@ Returns the user to the List Database Links screen.
=cut
-#-------------------------------------------------------------------
sub www_deleteDatabaseLinkConfirm {
my $session = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup(3));
+ return $session->privilege->insufficient unless canView($session);
return $session->privilege->vitalComponent if ($session->form->process("dlid") eq '0');
WebGUI::DatabaseLink->new($session,$session->form->process("dlid"))->delete;
return www_listDatabaseLinks($session);
}
+#-------------------------------------------------------------------
+
=head2 www_editDatabaseLink ( $session )
Create a new database link or edit an existing database link. The user must
@@ -131,10 +150,9 @@ Calls www_editDatabaseLinkSave on user submission.
=cut
-#-------------------------------------------------------------------
sub www_editDatabaseLink {
my $session = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup(3));
+ return $session->privilege->insufficient unless canView($session);
my ($output, %db, $f);
tie %db, 'Tie::CPHash';
if ($session->form->process("dlid") eq "new") {
@@ -212,6 +230,8 @@ sub www_editDatabaseLink {
return _submenu($session,$output,"990");
}
+#-------------------------------------------------------------------
+
=head2 www_editDatabaseLinkSave ( $session )
Form postprocessor for www_editDatabaseLink. Only users in group Admin (3)
@@ -221,11 +241,10 @@ Returns the user the Link Database Links screen.
=cut
-#-------------------------------------------------------------------
sub www_editDatabaseLinkSave {
my ($allowedKeywords);
my $session = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup(3));
+ return $session->privilege->insufficient unless canView($session);
# Convert enters to a single \n.
($allowedKeywords = $session->form->process("allowedKeywords")) =~ s/\s+/\n/g;
@@ -246,6 +265,8 @@ sub www_editDatabaseLinkSave {
return www_listDatabaseLinks($session);
}
+#-------------------------------------------------------------------
+
=head2 www_listDatabaseLinks ( $session )
List all Database links and allow the user to edit, copy or delete them.
@@ -253,10 +274,9 @@ Only users in group Admin (3) are allowed to see this screen.
=cut
-#-------------------------------------------------------------------
sub www_listDatabaseLinks {
my $session = shift;
- return $session->privilege->adminOnly() unless($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $links = WebGUI::DatabaseLink->getList($session);
my $output = '';
my $i18n = WebGUI::International->new($session);
diff --git a/lib/WebGUI/Operation/Graphics.pm b/lib/WebGUI/Operation/Graphics.pm
index c2454ad14..041ede0b0 100644
--- a/lib/WebGUI/Operation/Graphics.pm
+++ b/lib/WebGUI/Operation/Graphics.pm
@@ -90,12 +90,27 @@ sub _getColorForm {
return $f->printRowsOnly;
}
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user can administrate this operation. user defaults to
+the current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminGraphics") );
+}
+
#-------------------------------------------------------------------
sub www_addColorToPalette {
my ($f);
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
$f = WebGUI::HTMLForm->new($session);
$f->hidden(
@@ -120,7 +135,7 @@ sub www_addColorToPalette {
sub www_addColorToPaletteSave {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $color = WebGUI::Image::Color->new($session, $session->form->process('cid'));
if ($session->form->process('cid') eq 'new') {
@@ -141,7 +156,7 @@ my $palette = WebGUI::Image::Palette->new($session, $session->form->process('pid
sub www_deleteFont {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $font = WebGUI::Image::Font->new($session, $session->form->process('fid'));
$font->delete;
@@ -153,7 +168,7 @@ sub www_deleteFont {
sub www_deletePalette {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $palette = WebGUI::Image::Palette->new($session, $session->form->process('pid'));
$palette->delete;
@@ -166,7 +181,7 @@ sub www_editColor {
my ($f);
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $colorId = $session->form->process('cid');
return www_listPalettes($session) if ($colorId eq 'new');
@@ -194,7 +209,7 @@ sub www_editColor {
sub www_editColorSave {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $colorId = $session->form->process('cid');
return www_listPalettes($session) if ($colorId eq 'new');
@@ -215,7 +230,7 @@ sub www_editFont {
my ($f, $fontName);
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $i18n = WebGUI::International->new($session, "Graphics");
@@ -253,7 +268,7 @@ sub www_editFont {
sub www_editFontSave {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
if ($session->form->process('fid') eq 'new') {
@@ -278,7 +293,7 @@ sub www_editPalette {
my $session = shift;
my $paletteId = shift || $session->form->process('pid');
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $i18n = WebGUI::International->new($session, 'Graphics');
@@ -333,7 +348,7 @@ sub www_editPalette {
sub www_editPaletteSave {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $palette = WebGUI::Image::Palette->new($session, $session->form->process('pid'));
$palette->setName($session->form->process('paletteName'));
@@ -346,7 +361,7 @@ sub www_listGraphicsOptions {
my ($output);
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $i18n = WebGUI::International->new($session, 'Graphics');
@@ -361,7 +376,7 @@ sub www_listPalettes {
my ($output);
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $i18n = WebGUI::International->new($session, 'Graphics');
@@ -420,7 +435,7 @@ sub www_listFonts {
my ($output);
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $i18n = WebGUI::International->new($session, 'Graphics');
@@ -448,7 +463,7 @@ sub www_listFonts {
sub www_removeColorFromPalette {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $palette = WebGUI::Image::Palette->new($session, $session->form->process('pid'));
$palette->removeColor($session->form->process('index'));
diff --git a/lib/WebGUI/Operation/Group.pm b/lib/WebGUI/Operation/Group.pm
index 6ff41ce12..e91b5a89f 100644
--- a/lib/WebGUI/Operation/Group.pm
+++ b/lib/WebGUI/Operation/Group.pm
@@ -23,16 +23,7 @@ use WebGUI::Paginator;
use WebGUI::SQL;
use WebGUI::Utility;
-#-------------------------------------------------------------------
-sub _hasSecondaryPrivilege {
- my $session = shift;
- return 0 unless ($session->user->isInGroup(11));
- my $group = WebGUI::Group->new($session,$_[0]);
- return $group->userIsAdmin($session->user->userId);
-}
-
-
-#-------------------------------------------------------------------
+#----------------------------------------------------------------------------
sub _submenu {
my $session = shift;
my $workarea = shift;
@@ -40,10 +31,10 @@ sub _submenu {
my $i18n = WebGUI::International->new($session);
$title = $i18n->get($title) if ($title);
my $ac = WebGUI::AdminConsole->new($session,"groups");
- if ($session->user->isInGroup(3)) {
+ if (canEditAll($session)) {
$ac->addSubmenuItem($session->url->page('op=editGroup;gid=new'), $i18n->get(90));
}
- if ($session->user->isInGroup(11)) {
+ if (canView($session)) {
unless ($session->form->process("op") eq "listGroups"
|| $session->form->process("gid") eq "new"
|| $session->form->process("op") eq "deleteGroupConfirm") {
@@ -55,10 +46,65 @@ sub _submenu {
}
$ac->addSubmenuItem($session->url->page("op=listGroups"), $i18n->get(756));
}
- return $ac->render($workarea, $title);
+ return $ac->render($workarea, $title);
}
+#----------------------------------------------------------------------------
+
+=head2 canEditAll ( session [, user] )
+
+Returns true if the user is allowed to edit all groups. user defaults to the
+current user.
+
+=cut
+
+sub canEditAll {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminGroup") );
+}
+
+#----------------------------------------------------------------------------
+
+=head2 canEditGroup ( session, group [, user] )
+
+Returns true if the user can edit the specified group. user defaults to the
+current user.
+
+=cut
+
+sub canEditGroup {
+ my $session = shift;
+ my $groupId = shift;
+ my $user = shift || $session->user;
+
+ return 1 if canEditAll($session, $user);
+
+ my $group = WebGUI::Group->new($session,$groupId);
+ return $user->isInGroup( $session->setting->get("groupIdAdminGroupAdmin") )
+ && $group->userIsAdmin( $user->userId )
+ ;
+}
+
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user is allowed to use this control in any capacity. user
+defaults to the current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+
+ return canEditAll($session, $user)
+ || $user->isInGroup( $session->setting->get("groupIdAdminGroupAdmin") )
+ ;
+}
+
#-------------------------------------------------------------------
sub doGroupSearch {
my $session = shift;
@@ -160,7 +206,7 @@ sub walkGroups {
#-------------------------------------------------------------------
sub www_addGroupsToGroupSave {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3) || _hasSecondaryPrivilege($session,$session->form->process("gid")));
+ return $session->privilege->adminOnly() unless (canEditGroup($session,$session->form->process("gid")));
my $group = WebGUI::Group->new($session,$session->form->process("gid"));
my @groups = $session->form->group('groups');
$group->addGroups(\@groups);
@@ -170,7 +216,7 @@ sub www_addGroupsToGroupSave {
#-------------------------------------------------------------------
sub www_addUsersToGroupSave {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3) || _hasSecondaryPrivilege($session,$session->form->process("gid")));
+ return $session->privilege->adminOnly() unless (canEditGroup($session,$session->form->process("gid")));
my @users = $session->form->selectList('users');
my $group = WebGUI::Group->new($session,$session->form->process("gid"));
$group->addUsers(\@users);
@@ -202,7 +248,7 @@ sub www_autoDeleteFromGroup {
#-------------------------------------------------------------------
sub www_deleteGroup {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3) || _hasSecondaryPrivilege($session,$session->form->process("gid")));
+ return $session->privilege->adminOnly() unless (canEditGroup($session,$session->form->process("gid")));
return $session->privilege->vitalComponent() if (isIn($session->form->process("gid"), qw(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17)));
my $g = WebGUI::Group->new($session,$session->form->process("gid"));
$g->delete;
@@ -212,7 +258,7 @@ sub www_deleteGroup {
#-------------------------------------------------------------------
sub www_deleteGroupGrouping {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup('3') || _hasSecondaryPrivilege($session,$session->form->process("gid")));
+ return $session->privilege->adminOnly() unless (canEditGroup($session,$session->form->process("gid")));
my $group = WebGUI::Group->new($session,$session->form->process("gid"));
$group->deleteGroups([$session->form->process("delete")]);
return www_manageGroupsInGroup($session);
@@ -222,7 +268,7 @@ sub www_deleteGroupGrouping {
=head2 www_deleteGrouping ( )
-Deletes a set of users from a set of groups. Only Admins may perform this function.
+Deletes a set of users from a set of groups.
The user and group lists are expected to
be found in form fields names uid and gid, respectively. Visitors are not allowed to
perform this operation.
@@ -231,7 +277,7 @@ perform this operation.
sub www_deleteGrouping {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3) || _hasSecondaryPrivilege($session,$session->form->process("gid")));
+ return $session->privilege->adminOnly() unless (canEditGroup($session,$session->form->process("gid")));
if (($session->user->userId eq $session->form->process("uid") || $session->form->process("uid") eq '3') && $session->form->process("gid") eq '3') {
return $session->privilege->vitalComponent();
}
@@ -248,7 +294,7 @@ sub www_deleteGrouping {
#-------------------------------------------------------------------
sub www_editGroup {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3) || _hasSecondaryPrivilege($session,$session->form->process("gid")));
+ return $session->privilege->adminOnly() unless (canEditGroup($session,$session->form->process("gid")));
my ($output, $f, $g);
if ($session->form->process("gid") eq "new") {
$g = WebGUI::Group->new($session,"");
@@ -414,7 +460,7 @@ sub www_editGroup {
#-------------------------------------------------------------------
sub www_editGroupSave {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3) || _hasSecondaryPrivilege($session,$session->form->process("gid")));
+ return $session->privilege->adminOnly() unless (canEditGroup($session,$session->form->process("gid")));
my $g = WebGUI::Group->new($session,$session->form->process("gid"));
$g->description($session->form->process("description"));
$g->name($session->form->process("groupName"));
@@ -442,7 +488,7 @@ sub www_editGroupSave {
#-------------------------------------------------------------------
sub www_editGrouping {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3) || _hasSecondaryPrivilege($session,$session->form->process("gid")));
+ return $session->privilege->adminOnly() unless (canEditGroup($session,$session->form->process("gid")));
my $i18n = WebGUI::International->new($session);
my $f = WebGUI::HTMLForm->new($session);
$f->submit;
@@ -490,7 +536,7 @@ sub www_editGrouping {
#-------------------------------------------------------------------
sub www_editGroupingSave {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3) || _hasSecondaryPrivilege($session,$session->form->process("gid")));
+ return $session->privilege->adminOnly() unless (canEditGroup($session,$session->form->process("gid")));
my $group = WebGUI::Group->new($session,$session->form->process("gid"));
$group->userGroupExpireDate($session->form->process("uid"),$session->datetime->setToEpoch($session->form->process("expireDate")));
$group->userIsAdmin($session->form->process("uid"),$session->form->process("groupAdmin"));
@@ -500,7 +546,7 @@ sub www_editGroupingSave {
#-------------------------------------------------------------------
sub www_emailGroup {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3) || _hasSecondaryPrivilege($session,$session->form->process("gid")));
+ return $session->privilege->adminOnly() unless (canEditGroup($session,$session->form->process("gid")));
my ($output,$f);
my $i18n = WebGUI::International->new($session);
$f = WebGUI::HTMLForm->new($session);
@@ -536,7 +582,7 @@ sub www_emailGroup {
#-------------------------------------------------------------------
sub www_emailGroupSend {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3) || _hasSecondaryPrivilege($session,$session->form->process("gid")));
+ return $session->privilege->adminOnly() unless (canEditGroup($session,$session->form->process("gid")));
my $mail = WebGUI::Mail::Send->create($session, {toGroup=>$session->form->process("gid"),subject=>$session->form->process("subject"),from=>$session->form->process("from")});
$mail->addHtml($session->form->process("message","HTMLArea"));
$mail->addFooter;
@@ -549,7 +595,7 @@ sub www_emailGroupSend {
sub www_listGroups {
my $session = shift;
my $i18n = WebGUI::International->new($session);
- if ($session->user->isInGroup(3)) {
+ if (canEditAll($session)) {
my $output = getGroupSearchForm($session, "listGroups");
my ($groupCount) = $session->db->quickArray("select count(*) from groups where isEditable=1");
return _submenu($session,$output) unless ($session->form->process("doit") || $groupCount<250 || $session->form->process("pn") > 1);
@@ -571,7 +617,7 @@ sub www_listGroups {
$output .= '
';
$output .= $p->getBarTraditional;
return _submenu($session,$output);
- } elsif ($session->user->isInGroup(11)) {
+ } elsif (canView($session)) {
my ($output, $p, $sth, @data, @row, $i, $userCount);
my @editableGroups = $session->db->buildArray("select groupId from groupings where userId=".$session->db->quote($session->user->userId)." and groupAdmin=1");
push (@editableGroups,0);
@@ -599,14 +645,16 @@ sub www_listGroups {
$output .= $p->getBarTraditional($session->form->process("pn"));
return _submenu($session,$output,'89');
}
- return $session->privilege->adminOnly();
+ else {
+ return $session->privilege->adminOnly();
+ }
}
#-------------------------------------------------------------------
sub www_manageGroupsInGroup {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3) || _hasSecondaryPrivilege($session,$session->form->process("gid")));
+ return $session->privilege->adminOnly() unless (canEditGroup($session,$session->form->process("gid")));
my $f = WebGUI::HTMLForm->new($session);
$f->submit;
$f->hidden(
@@ -640,7 +688,7 @@ sub www_manageGroupsInGroup {
#-------------------------------------------------------------------
sub www_manageUsersInGroup {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3) || _hasSecondaryPrivilege($session,$session->form->process("gid")));
+ return $session->privilege->adminOnly() unless (canEditGroup($session,$session->form->process("gid")));
my $i18n = WebGUI::International->new($session);
my $output = WebGUI::Form::formHeader($session,)
.WebGUI::Form::hidden($session,{
diff --git a/lib/WebGUI/Operation/Help.pm b/lib/WebGUI/Operation/Help.pm
index a5785b7da..f266d7ccd 100644
--- a/lib/WebGUI/Operation/Help.pm
+++ b/lib/WebGUI/Operation/Help.pm
@@ -277,6 +277,21 @@ sub _columnar {
return $output;
}
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user can administrate this operation. user defaults to
+the current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminHelp") );
+}
+
#-------------------------------------------------------------------
=head2 www_viewHelp ( $session )
@@ -289,7 +304,7 @@ UI level, and this can be toggled on and off by another form parameter, uiOverri
sub www_viewHelp {
my $session = shift;
- return $session->privilege->insufficient() unless ($session->user->isInGroup(7));
+ return $session->privilege->insufficient() unless canView($session);
my $ac = WebGUI::AdminConsole->new($session,"help");
$session->style->setLink($session->url->extras("/help.css"), {rel=>"stylesheet", type=>"text/css"});
my $namespace = $session->form->process("namespace","className") || "WebGUI";
@@ -372,7 +387,7 @@ Display the index of all help entries in all namespaces.
sub www_viewHelpIndex {
my $session = shift;
- return $session->privilege->insufficient() unless ($session->user->isInGroup(7));
+ return $session->privilege->insufficient() unless canView($session);
my $i18n = WebGUI::International->new($session);
my @helpIndex;
my $i;
@@ -415,11 +430,13 @@ Utility method that returns link to the WebGUI Community Wiki with i18n'ed text.
sub wikiHelpLink {
my $session = shift;
+ return $session->privilege->insufficient() unless canView($session);
my $i18n = WebGUI::International->new($session);
return sprintf q!%s %s
!,
$i18n->get('wiki help label leadin'),
'http://www.webgui.org/community-wiki',
$i18n->get('wiki help target'),
+ ;
}
1;
diff --git a/lib/WebGUI/Operation/LDAPLink.pm b/lib/WebGUI/Operation/LDAPLink.pm
index 4d2615894..30ae6134a 100644
--- a/lib/WebGUI/Operation/LDAPLink.pm
+++ b/lib/WebGUI/Operation/LDAPLink.pm
@@ -25,8 +25,7 @@ Package WebGUI::Operation::LDAPLink
=head1 DESCRIPTION
-Operational handler for creating, managing and deleting LDAP Links. Only users
-in group Admin (3) are allowed to execute subroutines in this package.
+Operational handler for creating, managing and deleting LDAP Links.
=cut
@@ -72,6 +71,21 @@ sub _submenu {
return $ac->render($workarea, $title);
}
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user can administrate this operation. user defaults to
+the current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminLDAPLink") );
+}
+
#-------------------------------------------------------------------
=head2 validateForm ( )
@@ -123,7 +137,7 @@ Returns the user to the List LDAP Links screen.
sub www_copyLDAPLink {
my $session = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup(3));
+ return $session->privilege->insufficient unless canView($session);
my (%db);
tie %db, 'Tie::CPHash';
%db = $session->db->quickHash("select * from ldapLink where ldapLinkId=".$session->db->quote($session->form->process("llid")));
@@ -143,7 +157,7 @@ Deletes the requested LDAP Link in the form variable C. Returns the user
sub www_deleteLDAPLink {
my $session = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup(3));
+ return $session->privilege->insufficient unless canView($session);
$session->db->write("delete from ldapLink where ldapLinkId=".$session->db->quote($session->form->process("llid")));
$session->form->process("op") = "listLDAPLinks";
return www_listLDAPLinks($session);
@@ -161,7 +175,7 @@ Calls www_editLDAPLinkSave when done.
sub www_editLDAPLink {
my $session = shift;
my $errors = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup(3));
+ return $session->privilege->insufficient unless canView($session);
my ($output, %db, $f);
@@ -298,7 +312,7 @@ Returns the user to www_listLDAPLinks when done.
sub www_editLDAPLinkSave {
my $session = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup(3));
+ return $session->privilege->insufficient unless canView($session);
# Check for errors
my $errors = validateForm($session);
@@ -338,7 +352,7 @@ links. Each LDAP link is tested and the status of that test is returned.
sub www_listLDAPLinks {
my $session = shift;
- return $session->privilege->adminOnly() unless($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my ($output, $p, $sth, $data, @row, $i);
my $i18n = WebGUI::International->new($session,"AuthLDAP");
my $returnUrl = "";
diff --git a/lib/WebGUI/Operation/LoginHistory.pm b/lib/WebGUI/Operation/LoginHistory.pm
index f02f0d557..9a9162d5f 100644
--- a/lib/WebGUI/Operation/LoginHistory.pm
+++ b/lib/WebGUI/Operation/LoginHistory.pm
@@ -22,6 +22,21 @@ Package WebGUI::Operation::LoginHistory
=cut
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user can administrate this operation. user defaults to
+the current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminLoginHistory") );
+}
+
#-------------------------------------------------------------------
=head2 www_viewLoginHistory ( )
@@ -35,7 +50,7 @@ they used.
sub www_viewLoginHistory {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my ($output, $p, @row, $i, $sth, %data);
my $i18n = WebGUI::International->new($session);
tie %data, 'Tie::CPHash';
diff --git a/lib/WebGUI/Operation/ProductManager.pm b/lib/WebGUI/Operation/ProductManager.pm
index ce9d3427d..25b308d5b 100755
--- a/lib/WebGUI/Operation/ProductManager.pm
+++ b/lib/WebGUI/Operation/ProductManager.pm
@@ -49,6 +49,21 @@ sub _submenu {
return $ac->render($workarea, $title);
}
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user can administrate this operation. user defaults to
+the current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminProductManager") );
+}
+
#-------------------------------------------------------------------
=head2 www_deleteProductParameterOption ( $session )
@@ -65,7 +80,7 @@ sub www_deleteProductParameterOption {
my $session = shift;
my $optionId = $session->form->process("optionId");
- return $session->privilege->insufficient unless ($session->user->isInGroup(14));
+ return $session->privilege->insufficient unless canView($session);
WebGUI::Product->getByOptionId($session,$optionId)->deleteOption($optionId);
@@ -88,7 +103,7 @@ sub www_deleteProductParameter {
my $session = shift;
my $parameterId = $session->form->process("parameterId");
- return $session->privilege->insufficient unless ($session->user->isInGroup(14));
+ return $session->privilege->insufficient unless canView($session);
WebGUI::Product->getByParameterId($session,$parameterId)->deleteParameter($parameterId);
@@ -111,7 +126,7 @@ sub www_deleteProduct {
my $session = shift;
my $productId = $session->form->process("productId");
- return $session->privilege->insufficient unless ($session->user->isInGroup(14));
+ return $session->privilege->insufficient unless canView($session);
WebGUI::Product->new($session,$productId)->delete;
@@ -134,7 +149,7 @@ sub www_editProduct {
my $session = shift;
my ($productId, $product, $f, $i18n);
- return $session->privilege->insufficient unless ($session->user->isInGroup(14));
+ return $session->privilege->insufficient unless canView($session);
$i18n = WebGUI::International->new($session, 'ProductManager');
$productId = $session->form->process("productId");
@@ -260,7 +275,7 @@ sub www_editProductSave {
my $session = shift;
my ($self, @error, $productId, $product, $i18n);
- return $session->privilege->insufficient unless ($session->user->isInGroup(14));
+ return $session->privilege->insufficient unless canView($session);
$i18n = WebGUI::International->new($session, 'ProductManager');
@@ -307,7 +322,7 @@ sub www_editProductParameter {
my $session = shift;
my ($parameterId, $product, $productId, $parameter, $f, $i18n);
- return $session->privilege->insufficient unless ($session->user->isInGroup(14));
+ return $session->privilege->insufficient unless canView($session);
$i18n = WebGUI::International->new($session, 'ProductManager');
@@ -366,7 +381,7 @@ sub www_editProductParameterSave {
my $session = shift;
my (@error, $parameterId, $product, $i18n, $skuTemplate, $oldName, $newName);
- return $session->privilege->insufficient unless ($session->user->isInGroup(14));
+ return $session->privilege->insufficient unless canView($session);
$i18n = WebGUI::International->new($session, 'ProductManager');
@@ -416,7 +431,7 @@ sub www_editProductParameterOption {
my $session = shift;
my ($self, $optionId, $option, $f, $i18n);
- return $session->privilege->insufficient unless ($session->user->isInGroup(14));
+ return $session->privilege->insufficient unless canView($session);
$i18n = WebGUI::International->new($session, 'ProductManager');
@@ -492,7 +507,7 @@ sub www_editProductParameterOptionSave {
my $session = shift;
my ($self, @error, $optionId, $product, $i18n);
- return $session->privilege->insufficient unless ($session->user->isInGroup(14));
+ return $session->privilege->insufficient unless canView($session);
$i18n = WebGUI::International->new($session, 'ProductManager');
@@ -530,7 +545,7 @@ sub www_editProductVariant {
my $session = shift;
my ($variantId, $variant, $f, $i18n);
- return $session->privilege->insufficient unless ($session->user->isInGroup(14));
+ return $session->privilege->insufficient unless canView($session);
$i18n = WebGUI::International->new($session, "ProductManager");
@@ -596,7 +611,7 @@ sub www_editProductVariantSave {
my $session = shift;
my $variantId = $session->form->process("variantId");
- return $session->privilege->insufficient unless ($session->user->isInGroup(14));
+ return $session->privilege->insufficient unless canView($session);
WebGUI::Product->getByVariantId($session,$variantId)->setVariant($variantId, $session->form->paramsHashRef);
@@ -619,7 +634,7 @@ sub www_editSkuTemplate {
my $session = shift;
my ($product, $productId, $output, $f, $name, $i18n);
- return $session->privilege->insufficient unless ($session->user->isInGroup(14));
+ return $session->privilege->insufficient unless canView($session);
$i18n = WebGUI::International->new($session, "ProductManager");
@@ -671,7 +686,7 @@ sub www_editSkuTemplateSave {
my $session = shift;
my ($productId) = $session->form->process("productId");
- return $session->privilege->insufficient unless ($session->user->isInGroup(14));
+ return $session->privilege->insufficient unless canView($session);
WebGUI::Product->new($session,$productId)->set({
skuTemplate => $session->form->process("skuTemplate"),
@@ -696,7 +711,7 @@ sub www_listProducts {
my $session = shift;
my ($self, $sth, $output, $row, $i18n);
- return $session->privilege->insufficient unless ($session->user->isInGroup(14));
+ return $session->privilege->insufficient unless canView($session);
$i18n = WebGUI::International->new($session, 'ProductManager');
@@ -735,7 +750,7 @@ sub www_listProductVariants {
my $session = shift;
my ($productId, $product, @variants, %parameters, %options, $output, %composition, $i18n);
- return $session->privilege->insufficient unless ($session->user->isInGroup(14));
+ return $session->privilege->insufficient unless canView($session);
$i18n = WebGUI::International->new($session, "ProductManager");
@@ -808,7 +823,7 @@ The current WebGUI session object.
sub www_listProductVariantsSave {
my $session = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup(14));
+ return $session->privilege->insufficient unless canView($session);
my %availableVariants = map {$_ => 1} $session->form->selectList('available');
@@ -839,7 +854,7 @@ sub www_manageProduct {
my $session = shift;
my ($product, $output, $parameter, $option, $optionId, $i18n);
- return $session->privilege->insufficient unless ($session->user->isInGroup(14));
+ return $session->privilege->insufficient unless canView($session);
$i18n = WebGUI::International->new($session, "ProductManager");
diff --git a/lib/WebGUI/Operation/ProfileSettings.pm b/lib/WebGUI/Operation/ProfileSettings.pm
index 554e2ca12..dca513184 100644
--- a/lib/WebGUI/Operation/ProfileSettings.pm
+++ b/lib/WebGUI/Operation/ProfileSettings.pm
@@ -74,6 +74,23 @@ sub _submenu {
return $ac->render($workarea, $title);
}
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user can administrate this operation. user defaults to
+the current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminProfileSettings") );
+}
+
+#-------------------------------------------------------------------
+
=head2 www_deleteProfileCategoryConfirm ( $session )
Deletes the profile category in form variable C, unless the category is
@@ -82,10 +99,9 @@ Othewise, it returns the user to www_editProfileSettings.
=cut
-#-------------------------------------------------------------------
sub www_deleteProfileCategoryConfirm {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $category = WebGUI::ProfileCategory->new($session,$session->form->process("cid"));
return WebGUI::AdminConsole->new($session,"userProfiling")->render($session->privilege->vitalComponent()) if ($category->isProtected);
$category->delete;
@@ -103,7 +119,7 @@ Othewise, it returns the user to www_editProfileSettings.
#-------------------------------------------------------------------
sub www_deleteProfileFieldConfirm {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $field = WebGUI::ProfileField->new($session,$session->form->process("fid"));
return WebGUI::AdminConsole->new($session,"userProfiling")->render($session->privilege->vitalComponent()) if ($field->isProtected);
$field->delete;
@@ -120,7 +136,7 @@ Add or edit a profile category specified in form variable C. Calls www_edi
#-------------------------------------------------------------------
sub www_editProfileCategory {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $data = {};
my $i18n = WebGUI::International->new($session,"WebGUIProfile");
my $f = WebGUI::HTMLForm->new($session);
@@ -179,7 +195,7 @@ Returns the user to www_editProfileSettings when done.
#-------------------------------------------------------------------
sub www_editProfileCategorySave {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my %data = (
label=>$session->form->text("label"),
visible=>$session->form->yesNo("visible"),
@@ -202,7 +218,7 @@ Add or edit a profile field specified in form variable C. Calls www_editPr
#-------------------------------------------------------------------
sub www_editProfileField {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $i18n = WebGUI::International->new($session,"WebGUIProfile");
my $f = WebGUI::HTMLForm->new($session);
$f->submit;
@@ -337,7 +353,7 @@ Returns the user to www_editProfileSettings when done.
#-------------------------------------------------------------------
sub www_editProfileFieldSave {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
# Special case for WebGUI auth password recovery.
my $requiredForPasswordRecovery = $session->form->yesNo('requiredForPasswordRecovery');
@@ -381,7 +397,7 @@ Allows profile categories and fields to be managed (added, edited, deleted or mo
#-------------------------------------------------------------------
sub www_editProfileSettings {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $i18n = WebGUI::International->new($session,"WebGUIProfile");
my $output = "";
foreach my $category (@{WebGUI::ProfileCategory->getCategories($session)}) {
@@ -414,7 +430,7 @@ Returns the user to www_editProfileSettings.
#-------------------------------------------------------------------
sub www_moveProfileCategoryDown {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
WebGUI::ProfileCategory->new($session,$session->form->process("cid"))->moveDown;
return www_editProfileSettings($session);
}
@@ -429,7 +445,7 @@ Returns the user to www_editProfileSettings.
#-------------------------------------------------------------------
sub www_moveProfileCategoryUp {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
WebGUI::ProfileCategory->new($session,$session->form->process("cid"))->moveUp;
return www_editProfileSettings($session);
}
@@ -445,7 +461,7 @@ Returns the user to www_editProfileSettings.
#-------------------------------------------------------------------
sub www_moveProfileFieldDown {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
WebGUI::ProfileField->new($session,$session->form->process("fid"))->moveDown;
return www_editProfileSettings($session);
}
@@ -461,7 +477,7 @@ Returns the user to www_editProfileSettings.
#-------------------------------------------------------------------
sub www_moveProfileFieldUp {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
WebGUI::ProfileField->new($session,$session->form->process("fid"))->moveUp;
return www_editProfileSettings($session);
}
diff --git a/lib/WebGUI/Operation/Replacements.pm b/lib/WebGUI/Operation/Replacements.pm
index d04bae02d..1ab1a18fd 100644
--- a/lib/WebGUI/Operation/Replacements.pm
+++ b/lib/WebGUI/Operation/Replacements.pm
@@ -25,6 +25,8 @@ Package WebGUI::Operation::Replacements
Operation handler for conditional editing of submitted WebGUI content, similar to
a search and replace function in word processors.
+#----------------------------------------------------------------------------
+
=head2 _submenu ( $session, $workarea, $title )
Utility routine for creating the AdminConsole for Replacement functions.
@@ -44,35 +46,51 @@ table in the WebGUI namespace.
=cut
-#-------------------------------------------------------------------
sub _submenu {
- my $session = shift;
- my $workarea = shift;
- my $title = shift;
- my $i18n = WebGUI::International->new($session);
- $title = $i18n->get($title) if ($title);
- my $ac = WebGUI::AdminConsole->new($session,"contentFilters");
- $ac->addSubmenuItem($session->url->page("op=editReplacement;replacementId=new"), $i18n->get(1047));
- $ac->addSubmenuItem($session->url->page("op=listReplacements"), $i18n->get("content filters"));
- return $ac->render($workarea, $title);
+ my $session = shift;
+ my $workarea = shift;
+ my $title = shift;
+ my $i18n = WebGUI::International->new($session);
+ $title = $i18n->get($title) if ($title);
+ my $ac = WebGUI::AdminConsole->new($session,"contentFilters");
+ $ac->addSubmenuItem($session->url->page("op=editReplacement;replacementId=new"), $i18n->get(1047));
+ $ac->addSubmenuItem($session->url->page("op=listReplacements"), $i18n->get("content filters"));
+ return $ac->render($workarea, $title);
}
+#----------------------------------------------------------------------------
-=head2 www_deleteReplacement ( $session )
+=head2 canView ( session [, user] )
-Delete a replacement specified by the form variable C if the user is in group Admin (3). Returns the
-user to the List Replacements screen, www_listReplacements.
+Returns true if the user can administrate this operation. user defaults to
+the current user.
=cut
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminReplacements") );
+}
+
#-------------------------------------------------------------------
+
+=head2 www_deleteReplacement ( $session )
+
+Delete a replacement specified by the form variable C.
+Returns the user to the List Replacements screen, www_listReplacements.
+
+=cut
+
sub www_deleteReplacement {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
$session->db->write("delete from replacements where replacementId=".$session->db->quote($session->form->process("replacementId")));
return www_listReplacements($session);
}
+#-------------------------------------------------------------------
+
=head2 www_editReplacement ( $session )
Add a new, or edit an existing specified by the form variable
@@ -83,10 +101,9 @@ Calls www_editReplacementSave on submission.
=cut
-#-------------------------------------------------------------------
sub www_editReplacement {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $data = $session->db->getRow("replacements","replacementId",$session->form->process("replacementId"));
my $i18n = WebGUI::International->new($session);
my $f = WebGUI::HTMLForm->new($session);
@@ -119,19 +136,19 @@ sub www_editReplacement {
return _submenu($session,$f->print,"1052");
}
+#-------------------------------------------------------------------
+
=head2 www_editReplacementSave ( $session )
-Form post processor for www_editReplacement. You must be in group Admin (3) to
-execute this function.
+Form post processor for www_editReplacement.
Returns the user to www_listReplacements.
=cut
-#-------------------------------------------------------------------
sub www_editReplacementSave {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
$session->db->setRow("replacements","replacementId",{
replacementId=>$session->form->process("replacementId"),
searchFor=>$session->form->process("searchFor"),
@@ -140,17 +157,18 @@ sub www_editReplacementSave {
return www_listReplacements($session);
}
+#-------------------------------------------------------------------
+
=head2 www_listReplacements ( $session )
-List all replacements if the user is in group Admin (3) and provides URls for replacements
-to be added or deleted.
+List all replacements and provides URls for replacements to be added or
+deleted.
=cut
-#-------------------------------------------------------------------
sub www_listReplacements {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $i18n = WebGUI::International->new($session);
my $output = '';
$output .= ' |
';
diff --git a/lib/WebGUI/Operation/SSO.pm b/lib/WebGUI/Operation/SSO.pm
index 575d64dbd..c46c8ad11 100644
--- a/lib/WebGUI/Operation/SSO.pm
+++ b/lib/WebGUI/Operation/SSO.pm
@@ -14,21 +14,19 @@ use strict;
=head1 NAME
-Package WebGUI::Operation::Admin
+WebGUI::Operation::SSO
=head1 DESCRIPTION
-Operation handler for admin functions
+TODO
=cut
#-------------------------------------------------------------------
-=head2 www_switchOffAdmin ( )
-
-If the current user is in the Turn On Admin Group, then allow them to turn off Admin mode
-via WebGUI::Session::Var::switchAdminOff()
+=head2 www_ssoViaSessionId
+TODO: DOCUMENT ME
=cut
diff --git a/lib/WebGUI/Operation/Settings.pm b/lib/WebGUI/Operation/Settings.pm
index 7fd1a4bf2..f184adeb0 100644
--- a/lib/WebGUI/Operation/Settings.pm
+++ b/lib/WebGUI/Operation/Settings.pm
@@ -40,9 +40,9 @@ Returns an array reference used by www_editSettings and www_editSettingsSave to
=cut
sub definition {
- my $session = shift;
- my $i18n = shift;
- my @fields = ();
+ my $session = shift;
+ my $i18n = shift;
+ my @fields = ();
# company info
push(@fields, {
tab=>"company",
@@ -434,6 +434,47 @@ sub definition {
hoverHelp=>$i18n->get('164 description'),
defaultValue=>[$session->setting->get("authMethod")],
});
+
+ # Administrative permissions
+ my @groupSettings = qw(
+ groupIdAdminActiveSessions
+ groupIdAdminAdSpace
+ groupIdAdminCache
+ groupIdAdminCommerce
+ groupIdAdminCron
+ groupIdAdminDatabaseLink
+ groupIdAdminGraphics
+ groupIdAdminGroup
+ groupIdAdminGroupAdmin
+ groupIdAdminHelp
+ groupIdAdminLDAPLink
+ groupIdAdminLoginHistory
+ groupIdAdminProductManager
+ groupIdAdminProfileSettings
+ groupIdAdminReplacements
+ groupIdAdminSpectre
+ groupIdAdminStatistics
+ groupIdAdminSubscription
+ groupIdAdminTransactionLog
+ groupIdAdminUser
+ groupIdAdminUserAdd
+ groupIdAdminVersionTag
+ groupIdAdminWorkflow
+ groupIdAdminWorkflowRun
+ );
+
+ for my $group (@groupSettings) {
+ push @fields, {
+ tab => 'perms',
+ fieldType => 'group',
+ name => $group,
+ label => $i18n->get("settings $group label"),
+ hoverHelp => $i18n->get("settings $group hoverHelp"),
+ defaultValue => $session->setting->get($group),
+ };
+ }
+
+
return \@fields;
}
@@ -486,6 +527,7 @@ sub www_editSettings {
misc => { label => $i18n->get("misc") },
user => { label => $i18n->get("user") },
auth => { label => $i18n->get("authentication") },
+ perms => { label => $i18n->get("permissions") },
);
# Start the form
diff --git a/lib/WebGUI/Operation/Shared.pm b/lib/WebGUI/Operation/Shared.pm
index 69d561d85..8c818fe85 100644
--- a/lib/WebGUI/Operation/Shared.pm
+++ b/lib/WebGUI/Operation/Shared.pm
@@ -25,8 +25,7 @@ Shared routines for WebGUI Operations.
=head2 accountOptions ( $session )
-Copies the requested database link in the form variable C if the user
-is in group Admin (3). Returns the user to the List Database Links screen.
+TODO: DOCUMENT ME
=cut
diff --git a/lib/WebGUI/Operation/Spectre.pm b/lib/WebGUI/Operation/Spectre.pm
index 08812e93b..524c68c6f 100644
--- a/lib/WebGUI/Operation/Spectre.pm
+++ b/lib/WebGUI/Operation/Spectre.pm
@@ -27,6 +27,21 @@ Operations for Spectre.
=cut
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user can administrate this operation. user defaults to
+the current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminSpectre") );
+}
+
#-------------------------------------------------------------------
=head2 www_spectreGetSiteData ( )
@@ -36,7 +51,7 @@ Checks to ensure the requestor is who we think it is, and then returns a JSON st
=cut
sub www_spectreGetSiteData {
- my $session = shift;
+ my $session = shift;
$session->http->setMimeType("text/json");
$session->http->setCacheControl("none");
my %siteData = ();
@@ -92,17 +107,13 @@ Show information about Spectre's current workload.
sub www_spectreStatus {
my $session = shift;
- return $session->privilege->adminOnly() unless $session->user->isInGroup(3);
+ return $session->privilege->adminOnly unless canView($session);
# start to prepare the display
my $ac = WebGUI::AdminConsole->new($session, 'spectre');
my $i18n = WebGUI::International->new($session, 'Spectre');
$session->http->setCacheControl("none");
- unless (isInSubnet($session->env->get("REMOTE_ADDR"), $session->config->get("spectreSubnets"))) {
- $session->errorHandler->security("make a Spectre workflow runner request, but we're only allowed to accept requests from ".join(",",@{$session->config->get("spectreSubnets")}).".");
- return "subnet";
- }
my $remote = create_ikc_client(
port=>$session->config->get("spectrePort"),
@@ -112,14 +123,14 @@ sub www_spectreStatus {
);
if (!$remote) {
- return $ac->render($i18n->get('not running'), $i18n->get('spectre'));
+ return $ac->render($i18n->get('not running'), $i18n->get('spectre'));
}
my $sitename = $session->config()->get('sitename')->[0];
my $workflowResult = $remote->post_respond('workflow/getJsonStatus',$sitename);
if (!$workflowResult) {
$remote->disconnect();
- return $ac->render($i18n->get('workflow status error'), $i18n->get('spectre'));
+ return $ac->render($i18n->get('workflow status error'), $i18n->get('spectre'));
}
my $cronResult = $remote->post_respond('cron/getJsonStatus',$sitename);
diff --git a/lib/WebGUI/Operation/Statistics.pm b/lib/WebGUI/Operation/Statistics.pm
index dbe0e43a0..3b83a2df4 100644
--- a/lib/WebGUI/Operation/Statistics.pm
+++ b/lib/WebGUI/Operation/Statistics.pm
@@ -25,6 +25,8 @@ Package WebGUI::Operation::Statistics
Handles displaying statistics about WebGUI. This isn't page count, but rather information
about the number of assets, users, groups, etc.
+#-------------------------------------------------------------------
+
=head2 _submenu ( $session, $workarea, $title, $help )
Utility routine for creating the AdminConsole for Statistics functions.
@@ -49,8 +51,6 @@ as a link to the user.
=cut
-
-#-------------------------------------------------------------------
sub _submenu {
my $session = shift;
my $workarea = shift;
@@ -64,6 +64,23 @@ sub _submenu {
return $ac->render($workarea, $title);
}
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user can administrate this operation. user defaults to
+the current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminStatistics") );
+}
+
+#-------------------------------------------------------------------
+
=head2 www_viewStatistics ( $session )
Displays information to the user about WebGUI statistics if they are
@@ -109,10 +126,9 @@ Number of groups.
=cut
-#-------------------------------------------------------------------
sub www_viewStatistics {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my ($output, $data);
my $i18n = WebGUI::International->new($session);
my $url = "http://update.webgui.org/latest-version.txt";
diff --git a/lib/WebGUI/Operation/Subscription.pm b/lib/WebGUI/Operation/Subscription.pm
index 5fa40a25c..7db00fe2d 100644
--- a/lib/WebGUI/Operation/Subscription.pm
+++ b/lib/WebGUI/Operation/Subscription.pm
@@ -84,6 +84,23 @@ sub _submenu {
return $ac->render($workarea, $title);
}
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user can administrate this operation. user defaults to
+the current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminSubscription") );
+}
+
+#----------------------------------------------------------------------------
+
=head2 www_createSubscriptionCodeBatch ( $session, error )
Form to accept parameters to create a batch of subscription codes.
@@ -98,12 +115,10 @@ An HTML scalar of an error message to be returned to the user.
=cut
-
-#-------------------------------------------------------------------
sub www_createSubscriptionCodeBatch {
my $session = shift;
my (%subscriptions, $f, $error, $errorMessage);
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
$error = shift;
my $i18n = WebGUI::International->new($session, "Subscription");
@@ -174,7 +189,7 @@ sub www_createSubscriptionCodeBatchSave {
my $session = shift;
my ($numberOfCodes, $description, $expires, $batchId, @codeElements, $currentCode, $code, $i, @subscriptions,
@error, $creationEpoch);
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $i18n = WebGUI::International->new($session, "Subscription");
@@ -224,7 +239,7 @@ The current WebGUI session object.
#-------------------------------------------------------------------
sub www_deleteSubscription {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
WebGUI::Subscription->new($session,$session->form->process("sid"))->delete;
return www_listSubscriptions($session);
@@ -244,7 +259,7 @@ The current WebGUI session object.
#-------------------------------------------------------------------
sub www_deleteSubscriptionCodeBatch {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
$session->db->write("delete from subscriptionCodeBatch where batchId=".$session->db->quote($session->form->process("bid")));
$session->db->write("delete from subscriptionCode where batchId=".$session->db->quote($session->form->process("bid")));
@@ -266,7 +281,7 @@ The current WebGUI session object.
#-------------------------------------------------------------------
sub www_deleteSubscriptionCodes {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
if ($session->form->process("selection") eq 'dc') {
$session->db->write("delete from subscriptionCode where dateCreated >= ".$session->db->quote($session->form->process("dcStart")).
@@ -294,7 +309,7 @@ The current WebGUI session object.
sub www_editSubscription {
my $session = shift;
my ($properties, $subscriptionId, $durationInterval, $durationUnits, $f);
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $i18n = WebGUI::International->new($session, "Subscription");
@@ -388,7 +403,7 @@ The current WebGUI session object.
sub www_editSubscriptionSave {
my $session = shift;
my (@relevantFields);
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $properties = {};
@relevantFields = qw(subscriptionId name useSalesTax price description subscriptionGroup duration executeOnSubscription karma);
@@ -415,7 +430,7 @@ The current WebGUI session object.
sub www_listSubscriptionCodeBatches {
my $session = shift;
my ($p, $batches, $output);
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $i18n = WebGUI::International->new($session, "Subscription");
@@ -456,7 +471,7 @@ The current WebGUI session object.
sub www_listSubscriptionCodes {
my $session = shift;
my ($p, $codes, $output, $where, $ops, $delete);
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $i18n = WebGUI::International->new($session, "Subscription");
@@ -549,7 +564,7 @@ The current WebGUI session object.
sub www_listSubscriptions {
my $session = shift;
my ($p, $subscriptions, $output);
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $i18n = WebGUI::International->new($session, "Subscription");
diff --git a/lib/WebGUI/Operation/TransactionLog.pm b/lib/WebGUI/Operation/TransactionLog.pm
index c0be93f85..14dc5ad13 100644
--- a/lib/WebGUI/Operation/TransactionLog.pm
+++ b/lib/WebGUI/Operation/TransactionLog.pm
@@ -18,6 +18,21 @@ Operations for dealing with transactions from the WebGUI Commerce System.
=cut
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user can administrate this operation. user defaults to
+the current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminTransactionLog") );
+}
+
#-------------------------------------------------------------------
=head2 www_viewPurchaseHistory ( errorMessage )
@@ -108,7 +123,7 @@ sub www_deleteTransaction {
my $session = shift;
my $transactionId;
- return $session->privilege->insufficient unless ($session->user->isInGroup(3));
+ return $session->privilege->insufficient unless canView($session);
$transactionId = $session->form->process("tid");
@@ -120,7 +135,7 @@ sub www_deleteTransaction {
#-------------------------------------------------------------------
sub www_deleteTransactionItem {
my $session = shift;
- return $session->privilege->insufficient unless ($session->user->isInGroup(3));
+ return $session->privilege->insufficient unless canView($session);
WebGUI::Commerce::Transaction->new($session, $session->form->process("tid"))->deleteItem($session->form->process("iid"), $session->form->process("itype"));
diff --git a/lib/WebGUI/Operation/User.pm b/lib/WebGUI/Operation/User.pm
index 4c2143217..be42b12f6 100644
--- a/lib/WebGUI/Operation/User.pm
+++ b/lib/WebGUI/Operation/User.pm
@@ -69,11 +69,11 @@ sub _submenu {
my $title;
$title = $i18n->get($properties->{title}) if ($properties->{title});
- if ($session->user->isInGroup(11)) {
+ if (canEdit($session)) {
$ac->addSubmenuItem($session->url->page("op=editUser;uid=new"), $i18n->get(169));
}
- if ($session->user->isInGroup(3)) {
+ if (canEdit($session)) {
unless ($session->form->process("op") eq "listUsers"
|| $session->form->process("op") eq "deleteUserConfirm"
|| $userId eq "new") {
@@ -89,6 +89,55 @@ sub _submenu {
return $ac->render($workarea, $title);
}
+#----------------------------------------------------------------------------
+
+=head2 canAdd ( session [, user] )
+
+Returns true if the user is allowed to add other users. user defaults to the
+current user.
+
+=cut
+
+sub canAdd {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminUserAdd") )
+ || canEdit($session, $user)
+ ;
+}
+
+#----------------------------------------------------------------------------
+
+=head2 canEdit ( session [, user] )
+
+Returns true if the user is allowed to do everything in this module. user
+defaults to the current user.
+
+=cut
+
+sub canEdit {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminUser") );
+}
+
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user is allowed to see this module. user defaults to the
+current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return canAdd($session, $user);
+}
+
+#-------------------------------------------------------------------
+
=head2 doUserSearch ( session, op, returnPaginator, userFilter )
Subroutine that actually performs the SQL search for users.
@@ -112,7 +161,6 @@ Array reference, used to screen out user names via a SQL "not in ()" clause.
=cut
-#-------------------------------------------------------------------
sub doUserSearch {
my $session = shift;
my $op = shift;
@@ -151,7 +199,7 @@ sub doUserSearch {
#-------------------------------------------------------------------
-=head2 doUserSearchForm ( session, op, params, noStatus )
+=head2 getUserSearchForm ( session, op, params, noStatus )
Form front-end and display for searching for users.
@@ -246,7 +294,7 @@ Allows an administrator to assume another user.
sub www_becomeUser {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canEdit($session);
return unless WebGUI::User->validUserId($session, $session->form->process("uid"));
$session->var->end($session->var->get("sessionId"));
$session->user({userId=>$session->form->process("uid")});
@@ -265,7 +313,7 @@ after this.
sub www_deleteUser {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canEdit($session);
my ($u);
if ($session->form->process("uid") eq '1' || $session->form->process("uid") eq '3') {
return WebGUI::AdminConsole->new($session,"users")->render($session->privilege->vitalComponent());
@@ -279,7 +327,7 @@ sub www_deleteUser {
#-------------------------------------------------------------------
sub www_editUser {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(11));
+ return $session->privilege->adminOnly() unless canAdd($session);
my $error = shift;
my $uid = shift || $session->form->process("uid");
my $i18n = WebGUI::International->new($session, "WebGUI");
@@ -400,7 +448,7 @@ sub www_editUser {
sub www_editUserSave {
my $session = shift;
my $postedUserId = $session->form->process("uid"); #userId posted from www_editUser form
- my $isAdmin = $session->user->isInGroup(3);
+ my $isAdmin = canEdit($session);
my $isSecondary;
my $i18n = WebGUI::International->new($session);
my ($existingUserId) = $session->db->quickArray("select userId from users where username=".$session->db->quote($session->form->process("username")));
@@ -408,7 +456,7 @@ sub www_editUserSave {
my $actualUserId; #userId returned from the user object
unless ($isAdmin) {
- $isSecondary = ($session->user->isInGroup(11) && $postedUserId eq "new");
+ $isSecondary = (canAdd($session) && $postedUserId eq "new");
}
return $session->privilege->adminOnly() unless ($isAdmin || $isSecondary);
@@ -474,7 +522,7 @@ sub www_editUserSave {
#-------------------------------------------------------------------
sub www_editUserKarma {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canEdit($session);
my ($output, $f, $a, %user, %data, $method, $values, $category, $label, $default, $previousCategory);
my $i18n = WebGUI::International->new($session);
$f = WebGUI::HTMLForm->new($session);
@@ -510,7 +558,7 @@ sub www_editUserKarma {
#-------------------------------------------------------------------
sub www_editUserKarmaSave {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canEdit($session);
my ($u);
$u = WebGUI::User->new($session,$session->form->process("uid"));
$u->karma($session->form->process("amount"),$session->user->username." (".$session->user->userId.")",$session->form->process("description"));
@@ -542,8 +590,8 @@ sub www_formUsers {
foreach my $data (@{$p->getPageData}) {
$output .= '{userId}.'\';window.opener.document.getElementById(\''.$session->form->process("formId").'_display\').value=\''.$data->{username}.'\';window.close();">'.$data->{username}.'';
}
- $output .= '';
- $output .= $p->getBarTraditional;
+ $output .= '';
+ $output .= $p->getBarTraditional;
return $output;
}
@@ -551,12 +599,17 @@ sub www_formUsers {
#-------------------------------------------------------------------
sub www_listUsers {
my $session = shift;
- unless ($session->user->isInGroup(3)) {
- if ($session->user->isInGroup(11)) {
+
+ # If the user is only allowed to add users, send them right there.
+ unless (canEdit($session)) {
+ if (canAdd($session)) {
return www_editUser($session, undef, "new");
}
- return $session->privilege->adminOnly();
+ else {
+ return $session->privilege->adminOnly();
+ }
}
+
my %status;
my $i18n = WebGUI::International->new($session);
my $output = getUserSearchForm($session,"listUsers");
diff --git a/lib/WebGUI/Operation/VersionTag.pm b/lib/WebGUI/Operation/VersionTag.pm
index bf2c5f119..5c08d1317 100644
--- a/lib/WebGUI/Operation/VersionTag.pm
+++ b/lib/WebGUI/Operation/VersionTag.pm
@@ -40,6 +40,20 @@ These methods are available from this class:
=cut
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user can administrate this operation. user defaults to
+the current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminVersionTag") );
+}
#-------------------------------------------------------------------
@@ -86,7 +100,7 @@ An open tag id. This is optional as it normally grabs this value from a form pos
sub www_editVersionTag {
my $session = shift;
- return $session->privilege->insufficient() unless ($session->user->isInGroup(12));
+ return $session->privilege->insufficient() unless canView($session);
my $tagId = shift || $session->form->param("tagId");
my $ac = WebGUI::AdminConsole->new($session,"versions");
my $i18n = WebGUI::International->new($session,"VersionTag");
@@ -113,7 +127,7 @@ sub www_editVersionTag {
);
my $workflowId = (defined $tag) ? $tag->get("workflowId") : $session->setting->get("defaultVersionTagWorkflow");
my $groupId = (defined $tag) ? $tag->get("groupToUse") : "12";
- if ($session->user->isInGroup("pbgroup000000000000016")) {
+ if (canView($session)) {
$f->workflow(
value=>$workflowId,
type=>"WebGUI::VersionTag",
@@ -154,7 +168,7 @@ A reference to the current session.
sub www_editVersionTagSave {
my $session = shift;
- return $session->session->privilege->insufficient() unless ($session->user->isInGroup(12));
+ return $session->session->privilege->insufficient() unless canView($session);
if ($session->form->param("tagId") eq "new") {
my $tag = WebGUI::VersionTag->create($session, {
name=>$session->form->process("name","text", "Untitled"),
@@ -274,14 +288,14 @@ A reference to the current session.
sub www_manageCommittedVersions {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnlycanView($session);
my $ac = WebGUI::AdminConsole->new($session,"versions");
my $i18n = WebGUI::International->new($session,"VersionTag");
my $rollback = $i18n->get('rollback');
my $rollbackPrompt = $i18n->get('rollback version tag confirm');
$ac->addSubmenuItem($session->url->page('op=editVersionTag'), $i18n->get("add a version tag"));
$ac->addSubmenuItem($session->url->page('op=manageVersions'), $i18n->get("manage versions"));
- $ac->addSubmenuItem($session->url->page('op=managePendingVersions'), $i18n->get("manage pending versions")) if ($session->user->isInGroup(3));
+ $ac->addSubmenuItem($session->url->page('op=managePendingVersions'), $i18n->get("manage pending versions")) if canView($session);
my $output = '
| '.$i18n->get("version tag name").' | '.$i18n->get("committed on").' | '.$i18n->get("committed by").' | |
';
my $paginator = WebGUI::Paginator->new($session, $session->url->page("op=manageCommittedVersions"));
@@ -315,12 +329,12 @@ A reference to the current session.
sub www_managePendingVersions {
my $session = shift;
- return $session->privilege->adminOnly() unless ($session->user->isInGroup(3));
+ return $session->privilege->adminOnly() unless canView($session);
my $ac = WebGUI::AdminConsole->new($session,"versions");
my $i18n = WebGUI::International->new($session,"VersionTag");
$ac->addSubmenuItem($session->url->page('op=editVersionTag'), $i18n->get("add a version tag"));
$ac->addSubmenuItem($session->url->page('op=manageVersions'), $i18n->get("manage versions"));
- $ac->addSubmenuItem($session->url->page('op=manageCommittedVersions'), $i18n->get("manage committed versions")) if ($session->user->isInGroup(3));
+ $ac->addSubmenuItem($session->url->page('op=manageCommittedVersions'), $i18n->get("manage committed versions")) if canView($session);
my $output = '
| '.$i18n->get("version tag name").' |
';
my $sth = $session->db->read("select tagId,name,commitDate,committedBy from assetVersionTag where isCommitted=0 and isLocked=1");
@@ -349,12 +363,12 @@ A reference to the current session.
sub www_manageVersions {
my $session = shift;
- return $session->privilege->insufficient() unless ($session->user->isInGroup(12));
+ return $session->privilege->insufficient() unless canView($session);
my $ac = WebGUI::AdminConsole->new($session,"versions");
my $i18n = WebGUI::International->new($session,"VersionTag");
$ac->addSubmenuItem($session->url->page('op=editVersionTag'), $i18n->get("add a version tag"));
- $ac->addSubmenuItem($session->url->page('op=managePendingVersions'), $i18n->get("manage pending versions")) if ($session->user->isInGroup(3));
- $ac->addSubmenuItem($session->url->page('op=manageCommittedVersions'), $i18n->get("manage committed versions")) if ($session->user->isInGroup(3));
+ $ac->addSubmenuItem($session->url->page('op=managePendingVersions'), $i18n->get("manage pending versions")) if canView($session);
+ $ac->addSubmenuItem($session->url->page('op=manageCommittedVersions'), $i18n->get("manage committed versions")) if canView($session);
my ($tag,$workingTagId) = $session->db->quickArray("select name,tagId from assetVersionTag where tagId=?",[$session->scratch->get("versionTag")]);
$tag ||= "None";
my $rollback = $i18n->get("rollback");
@@ -369,7 +383,7 @@ sub www_manageVersions {
my $u = WebGUI::User->new($session,$tag->get("createdBy"));
$output .= '
';
- if ($session->user->isInGroup(3)) {
+ if (canView($session)) {
$output .= $session->icon->delete("op=rollbackVersionTag;tagId=".$tag->getId,undef,$rollbackPrompt);
}
$output .= $session->icon->edit("op=editVersionTag;tagId=".$tag->getId)
@@ -410,7 +424,7 @@ sub www_manageRevisionsInTag {
my $ac = WebGUI::AdminConsole->new($session,"versions");
my $i18n = WebGUI::International->new($session,"VersionTag");
$ac->addSubmenuItem($session->url->page('op=editVersionTag'), $i18n->get("add a version tag"));
- $ac->addSubmenuItem($session->url->page('op=manageCommittedVersions'), $i18n->get("manage committed versions")) if ($session->user->isInGroup(3));
+ $ac->addSubmenuItem($session->url->page('op=manageCommittedVersions'), $i18n->get("manage committed versions")) if canView($session);
$ac->addSubmenuItem($session->url->page('op=manageVersions'), $i18n->get("manage versions"));
my $output = "";
if ($session->form->param("workflowInstanceId")) {
@@ -488,7 +502,7 @@ A reference to the current session.
sub www_rollbackVersionTag {
my $session = shift;
- return $session->privilege->adminOnly() unless $session->user->isInGroup(3);
+ return $session->privilege->adminOnly() unless canView($session);
my $tagId = $session->form->process("tagId");
return $session->privilege->vitalComponent() if ($tagId eq "pbversion0000000000001");
if ($tagId) {
diff --git a/lib/WebGUI/Operation/Workflow.pm b/lib/WebGUI/Operation/Workflow.pm
index a8fe16946..8007c84b2 100644
--- a/lib/WebGUI/Operation/Workflow.pm
+++ b/lib/WebGUI/Operation/Workflow.pm
@@ -32,6 +32,36 @@ Operation handler for managing workflows.
=cut
+#----------------------------------------------------------------------------
+
+=head2 canRunWorkflow ( session [, user] )
+
+Returns true if the user can run workflows from this operation. user defaults to
+the current user.
+
+=cut
+
+sub canRunWorkflow {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminWorkflowRun") );
+}
+
+#----------------------------------------------------------------------------
+
+=head2 canView ( session [, user] )
+
+Returns true if the user can administrate this operation. user defaults to
+the current user.
+
+=cut
+
+sub canView {
+ my $session = shift;
+ my $user = shift || $session->user;
+ return $user->isInGroup( $session->setting->get("groupIdAdminWorkflow") );
+}
+
#-------------------------------------------------------------------
=head2 www_activityHelper ( session )
@@ -78,7 +108,7 @@ Allows the user to choose the type of workflow that's going to be created.
sub www_addWorkflow {
my $session = shift;
- return $session->privilege->insufficient() unless ($session->user->isInGroup("pbgroup000000000000015"));
+ return $session->privilege->insufficient() unless canView($session);
my $i18n = WebGUI::International->new($session, "Workflow");
my $f = WebGUI::HTMLForm->new($session);
$f->submit;
@@ -117,7 +147,7 @@ Saves the results from www_addWorkflow().
sub www_addWorkflowSave {
my $session = shift;
- return $session->privilege->insufficient() unless ($session->user->isInGroup("pbgroup000000000000015"));
+ return $session->privilege->insufficient() unless canView($session);
my $workflow = WebGUI::Workflow->create($session, {type=>$session->form->get("type")});
return www_editWorkflow($session, $workflow);
}
@@ -132,7 +162,7 @@ Deletes an entire workflow.
sub www_deleteWorkflow {
my $session = shift;
- return $session->privilege->insufficient() unless ($session->user->isInGroup("pbgroup000000000000015"));
+ return $session->privilege->insufficient() unless canView($session);
my $workflow = WebGUI::Workflow->new($session, $session->form->get("workflowId"));
$workflow->delete if defined $workflow;
return www_manageWorkflows($session);
@@ -148,7 +178,7 @@ Deletes an activity from a workflow.
sub www_deleteWorkflowActivity {
my $session = shift;
- return $session->privilege->insufficient() unless ($session->user->isInGroup("pbgroup000000000000015"));
+ return $session->privilege->insufficient() unless canView($session);
my $workflow = WebGUI::Workflow->new($session, $session->form->get("workflowId"));
if (defined $workflow) {
$workflow->deleteActivity($session->form->get("activityId"));
@@ -170,7 +200,7 @@ A reference to the current session.
sub www_demoteWorkflowActivity {
my $session = shift;
- return $session->privilege->insufficient() unless ($session->user->isInGroup("pbgroup000000000000015"));
+ return $session->privilege->insufficient() unless canView($session);
my $workflow = WebGUI::Workflow->new($session, $session->form->param("workflowId"));
$workflow->demoteActivity($session->form->param("activityId"));
return www_editWorkflow($session);
@@ -187,7 +217,7 @@ Displays displays the editable properties of a workflow.
sub www_editWorkflow {
my $session = shift;
my $workflow = shift;
- return $session->privilege->insufficient() unless ($session->user->isInGroup("pbgroup000000000000015"));
+ return $session->privilege->insufficient() unless canView($session);
$workflow = WebGUI::Workflow->new($session, $session->form->get("workflowId")) unless (defined $workflow);
my $i18n = WebGUI::International->new($session, "Workflow");
my $workflowActivities = $session->config->get("workflowActivities");
@@ -331,7 +361,7 @@ Saves the results of www_editWorkflow()
sub www_editWorkflowSave {
my $session = shift;
- return $session->privilege->insufficient() unless ($session->user->isInGroup("pbgroup000000000000015"));
+ return $session->privilege->insufficient() unless canView($session);
my $workflow = WebGUI::Workflow->new($session, $session->form->param("workflowId"));
$workflow->set({
enabled => $session->form->get("enabled", "yesNo"),
@@ -353,7 +383,7 @@ Displays a form to edit the properties of a workflow activity.
sub www_editWorkflowActivity {
my $session = shift;
- return $session->privilege->insufficient() unless ($session->user->isInGroup("pbgroup000000000000015"));
+ return $session->privilege->insufficient() unless canView($session);
my $activity = '';
if ($session->form->process("className","className")) {
$activity = WebGUI::Workflow::Activity->newByPropertyHashRef($session, {activityId=>"new",className=>$session->form->process("className","className")});
@@ -381,7 +411,7 @@ Saves the results of www_editWorkflowActivity().
sub www_editWorkflowActivitySave {
my $session = shift;
- return $session->privilege->insufficient() unless ($session->user->isInGroup("pbgroup000000000000015"));
+ return $session->privilege->insufficient() unless canView($session);
my $workflow = WebGUI::Workflow->new($session, $session->form->get("workflowId"));
if (defined $workflow) {
my $activityId = $session->form->get("activityId");
@@ -406,7 +436,7 @@ Display a list of the workflows.
sub www_manageWorkflows {
my $session = shift;
- return $session->privilege->insufficient() unless ($session->user->isInGroup("pbgroup000000000000015"));
+ return $session->privilege->insufficient() unless canView($session);
my $i18n = WebGUI::International->new($session, "Workflow");
my $output = '';
my $rs = $session->db->read("select workflowId, title, enabled from Workflow order by title");
@@ -440,7 +470,7 @@ A reference to the current session.
sub www_promoteWorkflowActivity {
my $session = shift;
- return $session->privilege->insufficient() unless ($session->user->isInGroup("pbgroup000000000000015"));
+ return $session->privilege->insufficient() unless canView($session);
my $workflow = WebGUI::Workflow->new($session, $session->form->param("workflowId"));
$workflow->promoteActivity($session->form->param("activityId"));
return www_editWorkflow($session);
@@ -458,7 +488,7 @@ sub www_runWorkflow {
my $session = shift;
$session->http->setMimeType("text/plain");
$session->http->setCacheControl("none");
- unless (isInSubnet($session->env->get("REMOTE_ADDR"), $session->config->get("spectreSubnets")) || $session->user->isInGroup("3")) {
+ unless (isInSubnet($session->env->get("REMOTE_ADDR"), $session->config->get("spectreSubnets")) || canRunWorkflow($session)) {
$session->errorHandler->security("make a Spectre workflow runner request, but we're only allowed to accept requests from ".join(",",@{$session->config->get("spectreSubnets")}).".");
return "error";
}
@@ -487,11 +517,11 @@ Display a list of the running workflow instances.
sub www_showRunningWorkflows {
my $session = shift;
- return $session->privilege->insufficient() unless ($session->user->isInGroup("pbgroup000000000000015"));
+ return $session->privilege->insufficient() unless canView($session);
my $i18n = WebGUI::International->new($session, "Workflow");
my $ac = WebGUI::AdminConsole->new($session,"workflow");
- my $isAdmin = $session->user->isInGroup("3");
+ my $isAdmin = canRunWorkflow($session);
# javascript for creating/showing/hiding the edit priority form
my $cancel = $i18n->get('edit priority cancel');
diff --git a/lib/WebGUI/i18n/English/WebGUI.pm b/lib/WebGUI/i18n/English/WebGUI.pm
index 6b5d4abf0..fbe4e48fb 100644
--- a/lib/WebGUI/i18n/English/WebGUI.pm
+++ b/lib/WebGUI/i18n/English/WebGUI.pm
@@ -3591,6 +3591,251 @@ LongTruncOk=1
lastUpdated => 0,
},
+ 'permissions' => {
+ message => q{Permissions},
+ lastUpdated => 0,
+ context => q{The label for the Permissions tab of the Settings Admin panel},
+ },
+
+ 'settings groupIdAdminActiveSessions label' => {
+ message => q{Active Sessions},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminActiveSessions hoverHelp' => {
+ message => q{Group to view and expire active sessions.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminAdSpace label' => {
+ message => q{AdSpace},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminAdSpace hoverHelp' => {
+ message => q{Group to manage advertising.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminCache label' => {
+ message => q{Cache},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminCache hoverHelp' => {
+ message => q{Group to view and flush cache.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminCommerce label' => {
+ message => q{Commerce},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminCommerce hoverHelp' => {
+ message => q{Group to manage Commerce settings.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminCron label' => {
+ message => q{Cron},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminCron hoverHelp' => {
+ message => q{Group to manage scheduled workflows.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminDatabaseLink label' => {
+ message => q{Database Link},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminDatabaseLink hoverHelp' => {
+ message => q{Group to manage database links.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminGraphics label' => {
+ message => q{Graphics},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminGraphics hoverHelp' => {
+ message => q{Group to manage fonts and palettes.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminGroup label' => {
+ message => q{Groups},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminGroup hoverHelp' => {
+ message => q{Group to manage all groups.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminGroupAdmin label' => {
+ message => q{Groups (limited)},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminGroupAdmin hoverHelp' => {
+ message => q{Group to manage groups that user is administrator of.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminHelp label' => {
+ message => q{Help},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminHelp hoverHelp' => {
+ message => q{Group that can view help.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminLDAPLink label' => {
+ message => q{LDAP},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminLDAPLink hoverHelp' => {
+ message => q{Group to manage LDAP links.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminLoginHistory label' => {
+ message => q{Login History},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminLoginHistory hoverHelp' => {
+ message => q{Group to view login history.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminProductManager label' => {
+ message => q{Products},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminProductManager hoverHelp' => {
+ message => q{Group to manage products},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminProfileSettings label' => {
+ message => q{User Profiling},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminProfileSettings hoverHelp' => {
+ message => q{Group to manage user profile fields.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminReplacements label' => {
+ message => q{Content Filters},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminReplacements hoverHelp' => {
+ message => q{Group to manage content filters.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminSpectre label' => {
+ message => q{Spectre},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminSpectre hoverHelp' => {
+ message => q{Group to view Spectre status},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminStatistics label' => {
+ message => q{Statistics},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminStatistics hoverHelp' => {
+ message => q{Group to view statistics},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminSubscription label' => {
+ message => q{Subscriptions},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminSubscription hoverHelp' => {
+ message => q{Group to manage subscriptions.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminTransactionLog label' => {
+ message => q{Transactions},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminTransactionLog hoverHelp' => {
+ message => q{Group to manage transactions.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminUser label' => {
+ message => q{Users},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminUser hoverHelp' => {
+ message => q{Group to manage users. Can add and edit users.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminUserAdd label' => {
+ message => q{Users (add only)},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminUserAdd hoverHelp' => {
+ message => q{Group that can only add new users.},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminVersionTag label' => {
+ message => q{Version Tags},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminVersionTag hoverHelp' => {
+ message => q{Group to manage version tags},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminWorkflow label' => {
+ message => q{Workflow},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminWorkflow hoverHelp' => {
+ message => q{Group to manage workflows},
+ lastUpdated => 0,
+ },
+
+
+ 'settings groupIdAdminWorkflowRun label' => {
+ message => q{Workflow (run)},
+ lastUpdated => 0,
+ },
+ 'settings groupIdAdminWorkflowRun hoverHelp' => {
+ message => q{Group that is allowed to run workflows from the admin console.},
+ lastUpdated => 0,
+ },
+
'wiki help label leadin' => {
message => q{For more help, visit the},
lastUpdated => 1185162265,
|