访问控制,登录和角色 Access control, logins, and roles Moodle的登录函数使用PHP的'cookie'的功能设置成当前会话的Cookie。 1、六种分配级别权限: site/global(网站全局) course category(课程类) course(课程) blocks(块) activities(活动) user(用户) front page(首页) Contexts是与定义的context水平相关的系统中的元素 Context定义在/lib/accesslib.php里 define('CONTEXT_SYSTEM', 10); define('CONTEXT_USER', 30); define('CONTEXT_COURSECAT', 40); define('CONTEXT_COURSE', 50); define('CONTEXT_GROUP', 60); define('CONTEXT_MODULE', 70); define('CONTEXT_BLOCK', 80); “System”context只有一个,其他的则有许多个,如”Course”context,“User”context等。
2、有7个内置的角色(role) administrator(管理员):系统管理员拥有任何权限,操作任何课程。 teacher(教师):教师可以在负责的课程中做任何事,包括更改活动和为学生评分。 non-editing teacher(无编辑权教师):可以在课程中教授和给学生们打分,但是无法改变活动内容。 student(学生):可参加一门课程,通常拥有较少的特权。 course creator(课程创建者):可以创建课程,并可以限制在一个课程类别里。 authenticated user(认证的用户):任何登录的用户都有这个角色 guest(访客):非登录用户拥有最小的权限,而且通常不能在任何地方输入文本。 这些role都可以分配给上面的一个或多个context。 每个用户可以拥有多个角色,这些角色继承所有适用于从用户访问请求的context级别的权限。 Capabilities are associated with context levels, and are specific access rules that can be granted to roles. Examples of capabilities are: moodle/site:manageblocks: Can manage blocks at the site context level moodle/user:viewdetails: Can view details of a user at the user context level moodle/course:view: Can view a course at the course context level 每一个capability都可以assign给下列4个访问权限级别(access levels)的其中一个: Not Set(没有设置) Allow(允许) Prohibit(禁止) Prevent(避免) 注意:开发者可以通过创建capabilities来控制访问我们的新功能。 总结来说: Contexts are specific elements in Moodle(Contexts是Moodle中的特定元素) Roles are associated with all contexts(Roles是与所有的contexts关联的) Capabilities are assigned to roles in a given context(Capabilities都被分配给特定context下的角色) Users are assigned to roles in a given context(用户都被分配给特定context下的角色) 普通系统使用User, Role, Capability就OK了,为什么moodle还要加多一个context? 这是因为同一个user在不同的context的role不同,比如在system context,user是admin role,而他在course“foo”里是instructor role(导师角色) 3、每个user role在不同的context里的capability都不同。 获取context对象的函数是get_context_instance()。 例:获取system context对象 $context = get_context_instance(CONTEXT_SYSTEM); 获取当前course的context global $COURSE; $context = get_context_instance(CONTEXT_COURSE, $COURSE->id); 获取context之后,下列2个函数是用来check当前login的user在该context里是否有所指定的capability。 require_capability测试当前用户的capabilities,看看他们是否在指定context内有指定的capability,如果他们没有,页面就重定向到一个错误页面。 has_capability功能与require_capability类似,但不会重定向到错误页面,而是return true or false 例: $context = get_context_instance(CONTEXT_SYSTEM); require_capability('moodle/site:doanything', $context); 上面的例子是检查当前用户在system context里是否有'moodle/site:doanything'的capability。 如何为你的moodle plugin/module自定义capability? 在plugin/module的root目录下创建一个db目录,然后在db目录下创建一个access.php,该文件用来定义capability。 下例是在helloworld block里定义一个block/helloworld:view capability,该capability的type是read,该capability是属于system context level里,并设置只有admin role user拥有该capability,其他role没有。 代码如下: <?php $block_helloworld_capabilities = array( 'block/helloworld:view' => array( 'captype' => 'read', 'contextlevel' => CONTEXT_SYSTEM, 'legacy' => array( 'guest' => CAP_PREVENT, 'student' => CAP_PREVENT, 'teacher' => CAP_PREVENT, 'editingteacher' => CAP_PREVENT, 'coursecreator' => CAP_PREVENT, 'admin' => CAP_ALLOW ) ) ); ?> 注意:该capability适用于任何使用了该block的地方。无论你是把该block加到home page,还是admin page,还是My Moodle page,还是course page,该capability都适用。但由于该capability是定义在system context level,只有那些在system context level具有admin role的user才能够看到这个block。
接下来将学习5种类型的Moodle plugin的开发: block filter activity module theme course format 并陆续发布开发笔记,敬请留意。转贴请注明出处。 |
|
来自: 昵称14267908 > 《moodle资料》