文档章节

limesurvey 权限插件开发 - 接入第三方的用户系统

NineRec
 NineRec
发布于 2015/08/13 17:25
字数 612
阅读 201
收藏 0

需求

  1. 管理员通过 oauth2 进行登录
  2. 填写问卷的用户使用已有的系统的权限认证
  3. 导出的问卷结果中需要有用户名

Limesurvey 版本

本文使用 Limesurvey 2.0.5 以上版本

解决方法

1. 管理员通过 oauth2 进行登录

可以通过编写插件来解决问题1和问题2。插件需要继承自AuthPluginBase。并在插件中订阅相关的Event:beforeLoginnewUserSessionbeforeLogout

其中,beforeLogin是在管理员登陆之前,可以在这里跳过 limesurvey 的登陆界面、进行自己的oauth2身份验证等。 newUserSession中进行真正的身份验证,将oauth2得到的用户信息与系统内的用户信息进行验证,并 setAuthSuccess。 beforeLogout则可以将相关的cookie、session等清理下。

2. 填写问卷的用户使用已有的系统的权限认证

同样是在插件中进行相关逻辑的编写。需要订阅的事件是beforeSurveyPage。也可以使用afterSurveyComplete来在用户填写完问卷后进行一些额外的操作。

插件的代码示例如下所示:

class AuthYours extends AuthPluginBase
{
    protected $storage = 'DbStorage';        
    static protected $description = 'Authentication For You';
    static protected $name = 'AuthYours';

    public function init()
    {
        $this->subscribe('beforeSurveyPage');
        $this->subscribe('afterSurveyComplete');
	$this->subscribe('beforeLogin');
        $this->subscribe('newUserSession');
        $this->subscribe('beforeLogout');
    }
    public function beforeSurveyPage(){……}
    public function afterSurveyComplete(){……}
    public function beforeLogin(){……}
    public function newUserSession(){
        …………
        $sUser = $this->getUsername(); //oauth得到的用户名信息
        $oUser = $this->api->getUserByName($sUser);
        …………
        $this->setAuthSuccess($oUser);
        …………
    }
    public function beforeLogout(){……}

3. 问卷导出的结果中添加用户名

直接hack了源代码,插件的方式也是可以的,但是工作量略有些大。

application/helpers/admin/export/writer.phpwrite方法中,对应的header数组和elementArray数组中添加需要的内容。

        // header中强行添加 用户id 字段
        array_unshift($headers, '用户ID');

        // If no empty survey, render/export responses array.
        foreach($oSurvey->responses as $response)
        {
            $elementArray = array();

            // 将对应的数据也从数据库取出,放入 elementArray 中
            $elementArray[] = $response['user_id'];

ps:
如果在你跟我类似,之前将用户ID存在了survey_{{surveyId}}这样的数据库中,其实会导致查看问卷结果的时候读不到结果。对应修改application/controller/admin/responses.php吧。 需要修改对应函数

    public function getResponses_json($iSurveyID)

© 著作权归作者所有

共有 人打赏支持
NineRec
粉丝 11
博文 75
码字总数 27999
作品 0
海淀
程序员
私信 提问
LimeSurvey 2.0 正式版发布,Web 投票系统

经过了 9 个 RC 版本的测试,LimeSurvey 终于发布了 2.0 正式版,2.0 版本对内部的代码进行了大量的重写,包含众多新特性和改进,完整的改进记录请看发行说明。 2.0 版本是 LimeSurvey 向模块...

oschina
2012/10/15
2.2K
0
LimeSurvey 1.92 RC2 发布

LimeSurvey 团队首先祝你新年快乐。2012年是很兴奋的年头,因为 LimeSurvey 1.92 正式版很快发布,包含很多很酷的新特性,基于强大的表达式管理器引擎。1.92 RC2 版本修复了 RC1 中存在的bug...

红薯
2012/01/12
407
0
LimeSurvey 1.90 RC2 发布,Web投票系统

LimeSurvey是一个基于WEB的投票系统,它支持 MySQL/PostgreSQL 该版本继续修复发现的bug,离稳定版更进一步。 下载地址: http://sourceforge.net/projects/limesurvey/files/2._LimeSurvey...

红薯
2010/07/06
345
1
LimeSurvey 1.91 RC2 发布

该版本已经没有发现重大的bug,稳定版很快会发布。 下载地址: http://sourceforge.net/projects/limesurvey/files/2._LimeSurvey_unstable/1.91_RC2/ LimeSurvey是一个基于WEB的投票系统,它...

红薯
2011/01/12
207
0
LimeSurvey 1.90 RC3 发布,Web投票系统

LimeSurvey是一个基于WEB的投票系统,它支持 MySQL/PostgreSQL 这将会是 1.9 正式版之前的最后一个 RC 版,改进内容请看 ChangeLog. 下载地址:https://sourceforge.net/projects/limesurvey...

红薯
2010/07/21
341
0

没有更多内容

加载失败,请刷新页面

加载更多

C++友元函数和友元类(C++ friend)详解

私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行。这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书...

shzwork
20分钟前
0
0
JAVA对map进行分组

public static Map<String, List<Map<String, Object>>> transition(List<Map<String, Object>> list){ Map<String, List<Map<String, Object>>> map = new HashMap<>(); //......

火龙战士
27分钟前
0
0
Confluence 6 升级完成后的检查

这个页面中的文章将会为 Confluence 管理员为 Confluence 升级完成后 提供检查列表以确保 Confluence 的升级顺利完成。这个检查列表没有包含所有需要检查的错误,但是将会检查会通常出现错误...

honeymoose
30分钟前
1
0
Vue.js开发环境搭建说明(mac)

vue开发环境搭建(mac) 投影放大:cmd + + 安装Node 下载Node 官网下载 https://nodejs.org/en/download/ 安装Node 双击安装包,选择安装目录,比如: /usr/local/bin 安装成功后最好记录一...

Danni3
46分钟前
2
0
Qt编写自定义控件3-速度仪表盘

前言 速度仪表盘,写作之初的本意是用来展示当前测试的网速用的,三色圆环+数码管显示当前速度,Qt自带了数码管控件QLCDNumber,直接集成即可,同时还带有动画功能,其实也可以用在汽车+工业...

飞扬青云
51分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部