Differences From:
File
src/login.c
part of check-in
[61ce5e3685]
- Get rid of the "locking" capability on wiki pages. Assume that anybody
who can write or append to a wiki page can do so to any wiki page.
Add the /wikiappend page for appending comments to the end of wiki.
by
drh on
2007-10-10 23:10:48.
[view]
To:
File
src/login.c
part of check-in
[929d28e358]
- Added the "e" capability for viewing ticket submitter email addresses.
Additional tinkering toward the design of tickets. This check-in is only
thinly tested.
by
drh on
2007-11-05 02:42:58.
[view]
@@ -292,9 +292,9 @@
case 's': g.okSetup = 1;
case 'a': g.okAdmin = g.okRdTkt = g.okWrTkt = g.okQuery =
g.okRdWiki = g.okWrWiki = g.okNewWiki =
g.okApndWiki = g.okHistory = g.okClone =
- g.okNewTkt = g.okPassword = 1;
+ g.okNewTkt = g.okPassword = g.okRdAddr = 1;
case 'i': g.okRead = g.okWrite = 1; break;
case 'o': g.okRead = 1; break;
case 'd': g.okDelete = 1; break;
@@ -307,15 +307,51 @@
case 'k': g.okWrWiki = g.okRdWiki = g.okApndWiki =1; break;
case 'm': g.okApndWiki = 1; break;
case 'f': g.okNewWiki = 1; break;
+ case 'e': g.okRdAddr = 1; break;
case 'r': g.okRdTkt = 1; break;
case 'n': g.okNewTkt = 1; break;
case 'w': g.okWrTkt = g.okRdTkt = g.okNewTkt =
g.okApndTkt = 1; break;
case 'c': g.okApndTkt = 1; break;
}
}
+}
+
+/*
+** If the current login lacks any of the capabilities listed in
+** the input, then return 0. If all capabilities are present, then
+** return 1.
+*/
+int login_has_capability(const char *zCap, int nCap){
+ int i;
+ int rc = 1;
+ if( nCap<0 ) nCap = strlen(zCap);
+ for(i=0; i<nCap && rc && zCap[i]; i++){
+ switch( zCap[i] ){
+ case 'a': rc = g.okAdmin; break;
+ case 'c': rc = g.okApndTkt; break;
+ case 'd': rc = g.okDelete; break;
+ case 'e': rc = g.okRdAddr; break;
+ case 'f': rc = g.okNewWiki; break;
+ case 'g': rc = g.okClone; break;
+ case 'h': rc = g.okHistory; break;
+ case 'i': rc = g.okWrite; break;
+ case 'j': rc = g.okRdWiki; break;
+ case 'k': rc = g.okWrWiki; break;
+ case 'm': rc = g.okApndWiki; break;
+ case 'n': rc = g.okNewTkt; break;
+ case 'o': rc = g.okRead; break;
+ case 'p': rc = g.okPassword; break;
+ case 'q': rc = g.okQuery; break;
+ case 'r': rc = g.okRdTkt; break;
+ case 's': rc = g.okSetup; break;
+ case 'w': rc = g.okWrTkt; break;
+ default: rc = 0; break;
+ }
+ }
+ return rc;
}
/*
** Call this routine when the credential check fails. It causes