一、為了不讓表產(chǎn)生重復(fù)鍵的錯(cuò)誤,可以在fixtrues加入表名,這樣每次測(cè)試都會(huì)清理表中的數(shù)據(jù),從而避免。當(dāng)然,需要建立與表名對(duì)應(yīng)的fixture文件,并且文件返回一個(gè)空的數(shù)組。
二、關(guān)于PHP中的靜態(tài)方法和靜態(tài)屬性
1.static關(guān)鍵字可以用來修飾變量、方法(靜態(tài)方法)
2.不經(jīng)過實(shí)例化,就可以直接訪問類中static的屬性和static的方法。
3.static 的屬性和方法,只能訪問static的屬性和方法,不能訪問非靜態(tài)的屬性和方法。因?yàn)殪o態(tài)屬性和方法被創(chuàng)建時(shí),可能還沒有任何這個(gè)類的實(shí)例可以被調(diào)用。
4.在當(dāng)前類中如果要訪問靜態(tài)成員可以使用self::關(guān)鍵字進(jìn)行訪問。
5.在類中我們不能使用this關(guān)鍵來訪問靜態(tài)屬性,因?yàn)殪o態(tài)屬性在對(duì)象可能還沒有實(shí)例化之前已經(jīng)存在。
6.在類中靜態(tài)方法訪問靜態(tài)屬性,使用類名::靜態(tài)屬性名即可調(diào)用類中的靜態(tài)屬性。
三、Yii本身提供了三張表,維護(hù)授權(quán)項(xiàng)目(AuthItem)、授權(quán)項(xiàng)目之間的繼承關(guān)系(AuthItemChild)以及授權(quán)項(xiàng)目和用戶之間的關(guān)系(AuthAssignment)。
四、初期建立授權(quán)項(xiàng)目(分為角色role,任務(wù)task和操作operation),繼承關(guān)系,并初始指定了一些授權(quán)。如果在業(yè)務(wù)中要求這些授權(quán),可以再次指定授權(quán),并且如果授權(quán)有業(yè)務(wù)邏輯的話,可以在指定授權(quán)的時(shí)候,將業(yè)務(wù)邏輯放在bizRule中。當(dāng)需要檢查用戶是否擁有某些授權(quán)的時(shí)候,可以通過authManger的checkAccess,并把需要檢查的業(yè)務(wù)邏輯的參數(shù)放在里面。
五、bizRule應(yīng)該是一個(gè)返回true或者false的表達(dá)式,一般是:
'return expression';表達(dá)式的參數(shù)是在檢查用戶是否擁有授權(quán)的時(shí)候傳出去的。
六、例子
(一)建立角色
$auth = Yii::app()->authManager;
$roleOwner = $auth->role('owner');
$roleMember = $auth->role('member');
$auth->createOperation('createIssue');
$auth->createOperation('createProject');
(二)建立角色之間的繼承關(guān)系
$roleOwner->addChild('member');
(三)指定授權(quán)項(xiàng)目到角色
$roleMember->addChild('createIssue');
$roleOwner->addChild('createProject');
(四)建立業(yè)務(wù)邏輯
...
$bizRule = 'return ....;'; //這個(gè)地方千萬注意,return包含在一對(duì)引號(hào)中,結(jié)尾必須是以“;”
結(jié)尾,否則問題很嚴(yán)重哦。
$auth->assign('member', $userId, $bizRule);
$auth->assign('owner', $userId2);
(五)檢查是否擁有授權(quán)
Yii::app()->user->checkAccess('createIssue', $params);//這里的$params是一個(gè)數(shù)組,是傳遞給業(yè)務(wù)邏輯中的變量的。
也可以:
Yii::app()->authManager->checkAccess('createIssue', $userId, $params);
上下兩個(gè)授權(quán)檢查在參數(shù)是不同的,看清楚了。