User Tools

Site Tools


stats:schema:account

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
stats:schema:account [2011/09/27 20:47]
Patrick Michel [Assistant Role]
stats:schema:account [2013/07/10 12:50] (current)
Line 1: Line 1:
 ====== User Accounts and Roles ====== ====== User Accounts and Roles ======
  
-This page describes a major part of the [[:​stats:​start]] [[:​stats:​schema]],​ namely the user accounts and the role handling.+This page describes a major part of the [[:​stats:​start]] [[:​stats:​schema]],​ namely the user accounts and the [[:​stats:​roles]] ​handling. It is part of [[stats]].
  
 ===== Schema ===== ===== Schema =====
  
 <code xcend> <code xcend>
-  ​element accounts { +  element account * username { 
-    ​element account * username { +    attribute lastName ​         { string } 
-      attribute lastName ​           { string } +    attribute firstName ​        ​{ string } 
-      attribute firstName ​          ​{ string } +    attribute email             ​{ string } 
-      attribute email               ​{ string } +    attribute password ​         { string } 
-      attribute password ​           { string } +    attribute code ?            { string } 
-  +    ​attribute reset ?           { string } 
-      element admin ?               ​{ } + 
-      element examiner * exam       ​{[ exists ​//exams/​exam[./​exam] ]} +    ​element admin ?             ​{ } 
-      element assistant * exercise ​ {[ exists ​//exercises/​exercise[./​exercise] ]} +    element examiner * exam     ​{[ exists /​exam[./​exam]/​examiner[../​username] ]} 
-      element tutor * exercise {     +    element assistant * exercise {[ exists /​exercise[./​exercise]/​assistant[../​username] ]} 
-        element group * id          {[ exists ​//exercises/​exercise[../​exercise]/groups/​group[./​id] ]} +    element tutor * exercise {     
-      }                              +      element group * id        {[ exists /​exercise[../​exercise]/​group[./​id]/​tutor[..account/​username] ]} 
-      element student ? {            +    }                              
-        attribute id                { ident [ unique //acounts/​account/​student[.] ]} +    element student ? {            
-      }                              +      attribute id              { ident [ count(., ​/​account/​student/id) = 1 ]} 
-    }                                +    }                              
-  }                                 ​+  } [ size(./​account/​admin) > 0 ]
 </​code>​ </​code>​
  
Line 31: Line 31:
  
 {{page>​stats:​proc:​changeAttributes (Account)&​noheader&​nofooter}} {{page>​stats:​proc:​changeAttributes (Account)&​noheader&​nofooter}}
 +
 +
 +==== Password Management ====
 +
 +{{page>​stats:​proc:​changePassword&​noheader&​nofooter}}
 +
 +{{page>​stats:​proc:​requestReset&​noheader&​nofooter}}
 +{{page>​stats:​proc:​resetPassword&​noheader&​nofooter}}
 +
 ==== Student Role ==== ==== Student Role ====
  
 The students in the [[exercise]] section, as well as the participants in the [[exam]] section, depend on the student role. This restricts the deletion of the role, i.e. the host language first has to delete these dependencies with corresponding procedures. The students in the [[exercise]] section, as well as the participants in the [[exam]] section, depend on the student role. This restricts the deletion of the role, i.e. the host language first has to delete these dependencies with corresponding procedures.
  
-{{page>​stats:​proc:​setStudentId&​noheader&​nofooter}}+{{page>​stats:​proc:​addStudentId&​noheader&​nofooter}}
  
 {{page>​stats:​proc:​removeStudentId&​noheader&​nofooter}} {{page>​stats:​proc:​removeStudentId&​noheader&​nofooter}}
Line 71: Line 80:
 This modeling of tutor rights is different from the current implementation. It might also be a nice design, if you can be tutor for an exercise, without (yet) having a group. This would grant some access rights already, I think. This modeling of tutor rights is different from the current implementation. It might also be a nice design, if you can be tutor for an exercise, without (yet) having a group. This would grant some access rights already, I think.
  
-<code xcend> +{{page>stats:proc:grantTutorRights&​noheader&​nofooter}}
-grantTutorRights(ident username, ident exerciseId, ident groupId) { +
-  assume exists //​accounts/​account[username];​ # implicitly true in OO implementations +
-  assume exists //​exercises/​exercise[exerciseId]/​groups/​group[groupId];​ +
-   +
-  assume not exists //​accounts/​account[username]/​tutor[exerciseId]/​group[groupId]);​ +
-  assume not exists //​exercises/​exercise[exerciseId]/​groups/​group[groupId]/​tutor[account];​ # implied by integrity and the assumption before+
  
-  if not exists //​accounts/​account[username]/​tutor[exerciseId] then # we could split the tutor rights here +{{page>stats:​proc:​revokeTutorRights&​noheader&​nofooter}}
-    insert //​accounts/​account[username] <tutor exercise=[exerciseId] />+
-  fi +
-  insert //​accounts/​account[username]/​tutor[exerciseId] <group id=[groupId] />; +
-  insert //​exercises/​exercise[exerciseId]/​groups/​group[groupId] <tutor account=[account] />; +
-} +
-</​code>​+
  
-<code xcend> 
-revokeTutorRights(ident username, ident exerciseId, ident groupId) { 
-  assume exists //​accounts/​account[username]/​tutor[exerciseId]/​group[groupId];​ # implies the account exists, which is implicitly true anyway 
-  assume exists //​exercises/​exercise[exerciseId]/​groups/​group[groupId]/​tutor[account];​ # implied by integrity and the assumption before 
- 
-  remove //​accounts/​account[username]/​tutor[exerciseId]/​group[groupId];​ 
-  if size(//​accounts/​account[username]/​tutor[exerciseId]/​group) = 0 then # should this be an additional procedure? 
-    remove //​accounts/​account[username]/​tutor[exerciseId];​ 
-  fi 
-  remove //​exercises/​exercise[exerciseId]/​groups/​group[groupId]/​tutor[account];​ 
-} 
-</​code>​ 
stats/schema/account.1317149225.txt.gz · Last modified: 2011/09/27 20:47 by Patrick Michel