Limesurvey二次開發(接入CAS統一身份認證)隨筆

Limesurvey是一個比較著名的開源問卷調查項目,GitHub地址:https://github.com/LimeSurvey/LimeSurveyphp

但因爲種種緣由,雖然用搜索引擎可以依稀看見不少高校但願使用它來建設本身學校的調查問卷系統,但在國內完成率比較低下。在我開發以前只看見上海交通大學完成了本身的二次開發,而且接入了本身學校的統一身份認證系統,除此以外,南京大學也打算作這個東西,然而過去了兩年,好像仍是沒有完成開發。html

猜想,國內比較滯後的緣由有如下的兩年:git

一、調查問卷系統屬於校園的非核心業務,可以利用第三方系統(問卷星等)解決問題,再利用iframe進行網頁的嵌套,徹底沒有本身花錢開發的太大必要。github

二、國內Limesurvey的參考資料特別少,甚至連如何去使用的文檔都特別少,更不用談是開發文檔。 因爲大可能是英文文檔,國內使用比較遲鈍。數據庫

高校進行開發,主要是兩個問題,一個是接入本身的全校身份統一認證系統(大學學校使用的是開源的CAS系統),其次就是改變他本身的非現代風格樣式。數組

Limesurvey是用PHP+多種數據庫進行開發的。使用的框架是某個版本的YII(估計還通過本身的改造),變量比較多,代碼量也比較大。服務器

樣式問題比較簡單,通常狀況下能夠修改他比較原始的表格佈局,替換成現代的DIV佈局。或者直接修改CSS樣式便可。但並不是全部能看到的東西都是經過模板渲染引擎來實現的,有很大的一部分是在本身控制的類裏面echo直接輸出的。app

比較重要的是接入CAS認證系統,基本上能夠分爲兩個部分:框架

  1. 利用CAS系統進行後臺的登陸,登陸後能夠發佈調查問卷佈局

  2. 針對發佈的調查問卷作必定權限控制。最爲基礎的就是把調查問卷分爲兩部分,一部分填寫調查問卷須要進行CAS的認證,一部分對全部的人進行開放。

具體的實現能夠參照上海交通大學的問卷吧系統。

利用CAS系統進行後臺的登陸

limesurvey系統對用戶的要求主要有ID, name, email, password. 這些東西除了password以外基本上CAS的attributes均可以以一個數組的形式進行提供,若是提供不了就能夠和password同樣處理,即符合他要求的格式便可(好比哈爾濱工業大學的沒法提供email, 能夠給每一個帳戶的默認email是學號@hit.edu.cn)

咱們須要作的首先是在配置中打開 authcasautocreate_permission, 具體能夠參見config-default.php中的配置內容。網址:https://github.com/LimeSurvey/LimeSurvey/blob/master/application/config/config-defaults.php#L187 ,通常狀況下開啓create便可實現自動建立用戶的權限

而後就是建立用戶的東西了:

大致上是在登陸以前進行檢測是否登陸(參見官方提供的SDK),在沒有登陸的狀況下跳轉到CAS服務器,而後跳轉回來的時候便可獲取到CAS服務器提供的一些基礎信息。而後對新建立的用戶進行一些設置。

實現起來不是特別的複雜。更爲重要的事,有人已經關於這個問題進行過相關的開發,而且有一個插件,你只須要進行簡單的修改就能夠實現登陸登出這一塊的問題了(在個人幫助下,如今已經兼容最新版的Limesurvey);

插件地址:https://github.com/univlorraine/limesurvey-cas

用CAS控制調查問卷的訪問權限

Limesurvey在設計的時候就已經考慮過相似的問題,即不是針對全部的人都開放調查問卷。具體的內容是在後臺的「發佈與訪問控制」中「使用驗證碼」來控制碼。

這個原始的功能就是爲了防止機器等暴力填寫調查問卷,而出現了驗證碼這一操做,在設計上很符合接入CAS統一認證。

如此,咱們只須要替換相關的代碼。即把以前的驗證碼相關的代碼替換成CAS部分便可對問卷的訪問權限進行有效的控制。

 

寫在後面:

正如本文所說的同樣,本文只是提供一下開發過程當中遇到的問題的大致解決思路,並不涉及如何去二次開發這個過程。

若是你恰巧也在進行這個開發,有什麼問題歡迎在評論中指出。

原文地址:http://life.rccoder.net/php/1092.html

相關文章
相關標籤/搜索