打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Moodle插件开发笔记5:基础知识五

访问控制,登录和角色

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

         并陆续发布开发笔记,敬请留意。转贴请注明出处。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Typical university systems architecture
網上教學
003Django 模板 | 菜鸟教程
.Net6 WebApi基本权限控制
===从零基础开始,到精通插件===-#1
第十八集 分析HelloWorld.c
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服