This shows you the differences between two versions of the page.
| 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> | ||