Menu

admin 'user' and 'site' level setting impld

zenwerks
2005-08-19
2013-03-13
  • zenwerks

    zenwerks - 2005-08-19

    I need to be able to use your level setting 0-5 with the pages to be able to prevent users from editing pages without permissions.  I found the most convenient place to put this admin function was in the current implementation of the print_IndexPage function.  I also added a function print_SetLevel to page template.  I also added a configuration variable $AdminCertifiesAllUsers to Settings.pl. When set to 1, all new users (with default level 0) can not do anything - i.e. the admin has to set their level to 1-5 for them to create pages and edit existing ones.

    PageTemplate.pl:
    # rws print_IndexPage changed to list article/article-parent/content-restrictions/userlevels-below-edit-denied
    sub print_IndexPage() {
      my $ns = shift;
      my $temp1 = sprintf($txt{'77'}, $ns);
      print qq~<h1>$temp1:</h1><ul>~;
      my @pageslist = &db_GetIndexOfPages($ns);
      my $level;
      my $temp1;
      my $isadmin = &is_Admin($AuthUser);
     
      foreach $page (@pageslist){
        if($ns eq '$DefaultNameSpace'){
          &db_load_PageData($page);
          $level = &db_get_PageData($page, 'article/content-restrictions/userlevels-below-edit-denied');
        }elsif($ns eq '$UserNameSpace'){
          &db_load_UserData($page);
          $level = &db_get_UserData($page, 'userprofile/user-level');     
        }
        if($level eq "") {$level=0;}
        print qq~<li><a href="$WikiURL?page=$ns:$page">$page</a> <i>($txt{'105'}:$level)  ~;
        if($isadmin>0){
          print qq~  $txt{'106'}: <a href="$WikiURL?action=setpglevel&level=0&page=$page&ns=$ns">0</a> | <a href="$WikiURL?action=setpglevel&level=1&page=$page&ns=$ns">1</a> | <a href="$WikiURL?action=setpglevel&level=2&page=$page&ns=$ns">2</a> | <a href="$WikiURL?action=setpglevel&level=3&page=$page&ns=$ns">3</a> | <a href="$WikiURL?action=setpglevel&level=4&page=$page&ns=$ns">4</a> | <a href="$WikiURL?action=setpglevel&level=5&page=$page&ns=$ns">5</a> | ~;
        }
        print qq~</i></li>~;
      }
      print qq~</ul>~;
    }

    # rws created.print_SetLevel
    sub print_SetLevel() {
      my $level = shift;
      my $page = shift;
      my $ns=shift;
      if($ns eq "$DefaultNameSpace"){
        &db_load_PageData($page);
        &db_store_PageData($page, 'article', ''); # force create always
        &db_store_PageData($page, 'article/content-restrictions', ''); # force create always
        &db_store_PageData($page, 'article/content-restrictions/userlevels-below-edit-denied', "$level");
        &db_flush_PageData($page);
      }
      if($ns eq "$UserNameSpace"){
        &db_load_UserData($page);
        &db_store_UserData($page, 'userprofile', ''); # force create always
        &db_store_UserData($page, 'userprofile/user-level', "$level");
        &db_flush_UserData($page);
      }
      print qq~<b>$txt{'107'} $page $txt{'108'} $level.</b>  <a href="$WikiURL?action=index&amp;ns=$ns">$txt{'109'}</a>~;
    }

    English.pl:
    #changed  verbage for 47 to better suit general situation.
    $txt{'47'} = 'You do not have permissions to access this page!'; # if page edit is attempted -rws

    # added to english.pl for admin level setting: rws
    $txt{'105'} = 'Level';
    $txt{'106'} = 'Set Level';
    $txt{'107'} = 'Access level for';
    $txt{'108'} = 'has been set to';
    $txt{'109'} = 'Refresh List';

    mxwiki.pl:

    # rws added page access level switch
      } elsif ($form{'action'} eq 'setpglevel'){
        print_PageHeader();
        &print_SetLevel($form{'level'},$form{'page'},$form{'ns'});
        print_PageFooter();
    # added above right before the following code (for reference only):
      } else {

        for my $key ( keys %form ) {
            my $value = $form{$key};
            print "$key => $value\n";
        }

    # The above was for the admin level setting of user and site within the Index functionality.
    # The following is for disallowing new users to do anything until the admin sets the level:

    Settings.pl:
    $AdminCertifiesAllUsers = 1; # 0 - disabled, 1 - enabled, new users can't do anything until admin raises their level to 1 or higher (rws).

    PageTemplate.pl:
    #modified this existing function:
    sub print_NewPageForm() {
      # rws modified.
      if ($AuthUser eq '') {$userlevel = 0;} else {$userlevel = &get_userlevel($AuthUser);}
      if($AdminCertifiesAllUsers==1 && $userlevel==0) {
        print $txt{'47'};
      }else{
        print qq~<h1></h1><p>
        <form method="get" action="$WikiURL?action=edit">
          $txt{'89'} <input type="text" name="page" size="40" value="$txt{'91'}">
          <br><br><input type="submit" name="submit" value="$txt{'90'}" />
        </form>
        </p>~;
      }
    }

    UserAuth.pl:
    #modified this existing function (2nd to last line):
    sub can_edit(){
      my $username = shift;
      my $pagename = shift;
      my ($ns, $name) = &get_page_namespace($pagename);
      if (!(&namespace_exists($ns))) {return 0;}
      if (&is_Admin($username)) {return 1;}
      if ($pagename =~ m/(.+)[\/].+[\/].*/) {return 0;}
      if (-e "$Database/global/sitelock") {return 0;}
      if (!(&db_PageExists($pagename))) {return 1;}
      my $pagel = &db_get_PageData($pagename, 'article/content-restrictions/userlevels-below-edit-denied');
      my $userl;
      if (&db_get_PageData($pagename, 'article/type') eq 'complete_original_work') {
          if ($AuthUser eq &db_get_PageData($pagename, 'article/original-author')) {return 1;} else {return 0;}
      }
      if ($username eq '') {$userl = 0;} else {$userl = &get_userlevel($username);}

      if ($ns eq $UserNameSpace) {
        if ($AuthUser ne $name) {return 0;} else {return 1;}
      }

      if($AdminCertifiesAllUsers==1 && $userl==0) {return 0;} #rws added.
     
      return ($userl >= $pagel);
    }

    I think that's it. Hope I didn't forget anything. :-)

     
    • zenwerks

      zenwerks - 2005-08-19

      There is a small bug:
      UserNameSpace and DefaultNameSpace should have double quotes, not single in the if($ns eq statements.  Corrected below.

      sub print_IndexPage() {
        my $ns = shift;
        my $temp1 = sprintf($txt{'77'}, $ns);
        print qq~<h1>$temp1:</h1><ul>~;
        my @pageslist = &db_GetIndexOfPages($ns);
        my $level;
        my $temp1;
        my $isadmin = &is_Admin($AuthUser);
        print "\n<!-- $ns, $DefaultNameSpace, $UserNameSpace -->\n";
        foreach $page (@pageslist){
          if($ns eq "$DefaultNameSpace"){
            &db_load_PageData($page);
            $level = &db_get_PageData($page, 'article/content-restrictions/userlevels-below-edit-denied');
          }elsif($ns eq "$UserNameSpace"){
            &db_load_UserData($page);
            $level = &db_get_UserData($page, 'userprofile/user-level');     
          }
          if($level eq "") {$level=0;}
          print qq~<li><a href="$WikiURL?page=$ns:$page">$page</a> <i>($txt{'105'}:$level)  ~;
          if($isadmin>0){
            print qq~  $txt{'106'}: <a href="$WikiURL?action=setpglevel&level=0&page=$page&ns=$ns">0</a> | <a href="$WikiURL?action=setpglevel&level=1&page=$page&ns=$ns">1</a> | <a href="$WikiURL?action=setpglevel&level=2&page=$page&ns=$ns">2</a> | <a href="$WikiURL?action=setpglevel&level=3&page=$page&ns=$ns">3</a> | <a href="$WikiURL?action=setpglevel&level=4&page=$page&ns=$ns">4</a> | <a href="$WikiURL?action=setpglevel&level=5&page=$page&ns=$ns">5</a> | ~;
          }
          print qq~</i></li>~;
        }
        print qq~</ul>~;
      }

       

Log in to post a comment.

MongoDB Logo MongoDB