Development:New permissions evaluation in 2.0: Difference between revisions
From MoodleDocs
No edit summary |
|||
(12 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{Infobox Project | {{Infobox Project | ||
|name = New permissions evaluation | |name = New permissions evaluation | ||
|state = | |state = Implemented | ||
|tracker = MDL-21710 | |tracker = MDL-21710 | ||
|discussion = n/a | |discussion = n/a | ||
|assignee = [[User:Petr Škoda (škoďák)|Petr Škoda (škoďák)]] | |assignee = [[User:Petr Škoda (škoďák)|Petr Škoda (škoďák)]] | ||
}} | }} | ||
{{Moodle 2.0}} | {{Moodle 2.0}}{{Roles}} | ||
=Goals= | =Goals= | ||
Line 19: | Line 18: | ||
# evaluate permissions in given context for each role separately (going from bottom to top in context tree, first found wins unless there is a CAP_PROHIBIT on any level) | # evaluate permissions in given context for each role separately (going from bottom to top in context tree, first found wins unless there is a CAP_PROHIBIT on any level) | ||
# user has capability if he/she has at least one role which evaluated to CAP_ALLOW and at the same time no role which was evaluated to CAP_PROHIBIT | # user has capability if he/she has at least one role which evaluated to CAP_ALLOW and at the same time no role which was evaluated to CAP_PROHIBIT | ||
http://tracker.moodle.org/secure/attachment/19672/Allowed_roles.png | |||
=Performance improvements= | =Performance improvements= | ||
Line 28: | Line 28: | ||
=See also= | =See also= | ||
* [[ | * [[Obsolete:Enrolment rewrite and role tweaks proposal]] | ||
* [[Obsolete:Role overrides revisited]] | |||
* [[Development:New permission overriding UI]] | * [[Development:New permission overriding UI]] | ||
* [[Development:Role | * [[Development:Role archetypes]] | ||
[[Category:Developer]] | |||
[[Category:Roles]] | [[Category:Roles]] |
Latest revision as of 19:06, 15 June 2010
Goals
The main goals are:
- replace current confusing permission evaluation
- improve performance
- enable improvements in permission overriding UI
Permission evaluation algorithm
- find all roles with given capability used in definition or override
- evaluate permissions in given context for each role separately (going from bottom to top in context tree, first found wins unless there is a CAP_PROHIBIT on any level)
- user has capability if he/she has at least one role which evaluated to CAP_ALLOW and at the same time no role which was evaluated to CAP_PROHIBIT
http://tracker.moodle.org/secure/attachment/19672/Allowed_roles.png
Performance improvements
has_capability() and get_users_by_capability() uses fixed number of queries. The result could be returned as sql query instead of database records.
Backwards compatibility
The only potential problem is CAP_PREVENT in overrides when user has several conflicting roles. Originally this was highlighted as a special feature, unfortunately it was in fact the major source of confusion.