RBACã¯ãWebã¢ããªã±ãŒã·ã§ã³ãžã®ã¢ã¯ã»ã¹ãéäžç®¡çããããã®ã·ã³ãã«ã§åŒ·åãªæ¹æ³ã§ãã äž»ãªå©ç¹ã¯ãæ¿èªéå±€ãæ£ããç解ããŠé©çšããããšã§ãã³ã³ãããŒã©ãŒã®ã³ãŒããå€æŽããã«éåžžã«æè»ã«ã¢ã¯ã»ã¹ãå¶åŸ¡ã§ããããšã§ãã
æ®å¿µãªãããYIIã®æšæºRBACããã¥ã¢ã«ã«ã¯åçãããå€ãã®è³ªåãæ®ãããŠããŸãã ãã®ç¶æ³ãä¿®æ£ããã€ããã§ãã
ãæ£ãããéå±€ã®äœæã«ã€ããŠèª¬æããŸãããã®æ¹æ³ã¯äŸ¡å€ããããŸããã ãããŠæåŸã«ãLDAPæ¿èªïŒActiveDirectoryããïŒãYiiãšRBACãšåéã«ããæ¹æ³ã«é¢ããæ瀺ãä¿åããŸããã
èå³ã®ããæ¹ãç«ãžããããïŒ
RBAC
ïŒåœ¹å²ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ïŒåœ¹å²ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ ã Yiiã®ãã®ã·ã¹ãã ã®åºæ¬ã¯ã3ã€ã®äž»èŠãªãªã³ã¯ã§ãïŒ
- 圹å²
- ã¿ã¹ã¯
- æäœïŒæäœïŒ
èªè
ã¯ãã§ã«
å
¬åŒã®YIIæç§æžã®ããŒãžãç°¡åã«ã¬ãã¥ãŒããŠãããYiiã®èªå¯ã¡ã«ããºã ã®åºæ¬ååãç¥ã£ãŠ
ãããš
æããŸãã
ãããã£ãŠãæ¿èªèŠçŽ ã®æ£ããéå±€ã®æ§ç¯ã«ããã«é²ã¿ãŸãã
ããŒã«ã®éå±€ã
æãéèŠã§ç解ãã«ããã®ã¯ãRBACã®èŠçŽ ã®éå±€ã§ãã ãããã©ãã»ã©ããèããããŠãããã¯ãã·ã¹ãã å
ã®ããŒã«ãã©ãã ãæè»ã«ç®¡çã§ããããããã³ã³ã³ãããŒã©ãŒã³ãŒããå€æŽããå¿
èŠãããé »åºŠã«ãã£ãŠç°ãªããŸãã
åæ¿èªèŠçŽ ã«ã€ããŠããã«è©³ããèããŠã¿ãŸãããã
- æäœã¯ãæ¿èªã®æãäœãèŠçŽ ã§ãã ããã¯ãã³ã³ãããŒã©ãŒã®ã³ãŒãã§ç¢ºèªããå¿
èŠããããã®ã§ãã èšãæããã°ãæäœã¯ã³ãŒãã«ããã¿ã€ããã®ã§ãã
- å察ã«ã 圹å²ã¯ãæäœãšã¿ã¹ã¯ãã°ã«ãŒãåããæ¿èªã®æé«ã®èŠçŽ ã§ãã ãããŠãããããŠãŒã¶ãŒã«ã¢ã¿ããããªããã°ãªããªã圹å²ã§ãã
- ã¿ã¹ã¯ -ããã¯ãæäœãšããŒã«ã®éã®ãªãã·ã§ã³èŠçŽ ã§ãããbizRuleã䜿çšããŠæäœã®æš©éãå¶éããŸãã ç解ã容æã«ããããã«ã ãã£ã«ã¿ãŒãšåŒã³ãŸãããã

äžã®å³ã¯ãã³ã³ãããŒã©ãŒãæäœããã§ãã¯ããããŒã«ããŠãŒã¶ãŒã«å²ãåœãŠãããŠããäžè¬çãªéå±€ã瀺ããŠããŸãã ãã ããYIIã¯ããŠãŒã¶ãŒããŒã«ãªã©ãã³ã³ãããŒã©ãŒå
ã®ä»ã®ãã®ããã§ãã¯ããããšã劚ããŸããã
ãã ããããã¯èª€ãã§ãããéäžç®¡çã®å©ç¹ã倱ããšããäºå®ã«ã€ãªããããšãèŠããŠããå¿
èŠããããŸãã
äŸãèããŠã¿ãŸãããïŒ
ç§ãã¡ã¯ã管çè
ã«å¯ŸããŠã¢ã¯ã»ã¹ãå·®å¥åããããã¥ãŒã¹ãæã£ãŠããŸãã
RBACãèšèšããéã«æåã«ãã¹ãããšã¯ãå¯èœãªæäœïŒäžèŠãããšãŠãŒã¶ãŒããŒã«ã§ã¯ãªãïŒãæ€èšããããšã§ãã
éåžžããã¥ãŒã¹ã¯
åé€ ã
äœæ ã
èªã¿åã ã
ç·šéã§ããŸãã ãããã®ã¢ã¯ã·ã§ã³ã
deleteNews ã
createNews ã
readNews ã
updateNewsã® ãªãã¬ãŒã·ã§ã³ã«
å€æããŸãã
ã³ãŒãã§ã¯ã次ã®æäœã®ããããã確èªã§ããŸãã
if(Yii::app()->user->checkAccess('createNews')) {
æäœãæ€èšãããåŸãããŒã«ã«é²ãããšãã§ããŸãïŒã¿ã¹ã¯ãæå³çã«ã¹ãããããŸãããããã«ã€ããŠã¯å°ãåŸã§èª¬æããŸãïŒã
å©çšå¯èœãªæäœããã次ã®åœ¹å²ãåºå¥ã§ããŸãã
newsReader ã
newsManager ã
newsAuthor ã
èŠçŽ ã®éå±€ã¯æ¬¡ã®ãšããã§ãã
- newsReader
- ãã¥ãŒã¹
- newsManager
- readNews
- createNews
- deleteNews
- updateNews
ãããã®ããŒã«ã¯ãç¹å®ã®ãŠãŒã¶ãŒã«é¢é£ä»ããããšãã§ããŸãã ããããããäžè¬åããã圹å²ã®å¥ã®æœè±¡åãäœæããããããŠãŒã¶ãŒã«æ·»ä»ããæ¹ãè¯ãã§ããããäŸãã°ïŒ
- ã²ã¹ã
- èªå¯ããã
- ã¢ãã¬ãŒã¿ãŒ
ãã®ãããªæœè±¡åã¯ããã¥ãŒã¹ã ãã§ãªãããã©ãã®ã£ã©ãªãŒã®åçãåºå
ã®ååã管çããå¿
èŠãããå Žåã«äŸ¿å©ã§ãã 次ã«ãã·ã¹ãã ã®ãã®ãããªã»ã¯ã·ã§ã³ããšã«ã
photoReaderïŒshowPhotoïŒ ã
photographerïŒshowPhoto ã
addPhoto ïŒ ã
photoManagerïŒshowPhotoãaddPhotoãdeletePhotoïŒãªã©ã®ç¬èªã®ãäžéãããŒã«ãäœæããäžè¬åãããããŒã«ã«ã¢ã¿ããããå¿
èŠããããŸãã
- ã²ã¹ã
- newsReader
- ãã©ããªãŒããŒ
- èªå¯ããã
- ã¢ãã¬ãŒã¿ãŒ
ã€ãŸã ã²ã¹ãã¯ãã¥ãŒã¹ãèªã¿ãåçãèŠãããšãã§ããŸãã æ¿èªããããŠãŒã¶ãŒã¯ããã¥ãŒã¹ãæžããŠåçãè¿œå ã§ããŸãã ã¢ãã¬ãŒã¿ãŒã¯äžèšã®ãã¹ãŠãå®è¡ã§ããã ãã§ãªããä»ã®äººã®åçããã¥ãŒã¹ãç·šéããã³åé€ã§ããŸãã
ãããããæŽæ°æäœã¯newsAuthorããŒã«ãšPhotographerããŒã«ã§ã¯äœ¿çšã§ããªãããšã«æ°ã¥ããã§ãããã ããã§ãããã®æ®µéã§updateNewsãŸãã¯updatePhotoã®æäœãäžãããšããã¹ãŠã®åçãç¡å·®å¥ã«ç®¡çã§ããããã«ãªãããã§ãã ãããŠãèè
ã¯èªåã®èŠçŽ ã®ã¿ãç·šéã§ããå¿
èŠããããŸãã
ãã®ããã«ã¿ã¹ã¯ãäœæãããŸãã ã¿ã¹ã¯ã¯ãæš©éãæå®ã§ãããã£ã«ã¿ãŒã§ãã
updateOwnNewsã¿ã¹ã¯ãäœæããŸãããã
ãã®ã¿ã¹ã¯ã®åå«ã¯
updateNewsãå²ãåœãŠ
ãŸã ã ã¿ã¹ã¯ã®ååãããããã¯ããªããããªãèªèº«ã®ãã¥ãŒã¹ãç·šéããããšãå¯èœã«ããããšã¯æããã§ãããbizRuleã¯ããã§ç§ãã¡ãå©ããŸãã
bizRuleã¯ããçš®ã®PHPã³ãŒãã§ããããã®çµæãçãã§ãããã®ãŠãŒã¶ãŒã«ãã®ã«ãŒã«ãé©çšãããã©ããã§ãã
updateOwnNewsã¿ã¹ã¯ã®bizRuleã¯æ¬¡ã®ããã«ãªããŸãã
$bizRule='return Yii::app()->user->id==$params["news"]->authID;';
äœæè
ã®IDãçŸåšã®æ¿èªæžã¿ãŠãŒã¶ãŒã®ãã¥ãŒã¹ãšäžèŽãããã©ããã確èªããŸãã
ããžãã¹ã«ãŒã«ã§çŸåšã®ãã¥ãŒã¹ã¢ã€ãã ãååŸããã«ã¯ããŸãããã«æž¡ãå¿
èŠããããŸãã
$params=array('news'=>$post); if(Yii::app()->user->checkAccess('updateNews',$params)) {
ç¹å®ã®ã¿ã¹ã¯ïŒ
updateOwnNews ïŒã§ã¯ãªãã
updateNewsæäœïŒéå±€ã®æäžäœèŠçŽ ïŒããã§ãã¯ããŠããããšã«æ³šæããŠãã ããã
ã¿ã¹ã¯ã®äœæåŸã«updateOwnNewsã次ã®ããã«ãªã£ãéå±€ã®ãããã§ãã
- ãã¥ãŒã¹
- readNews
- createNews
- updateOwnNews
Yiiã¯äžããã¢ã¯ã»ã¹å¶åŸ¡ãéå§ããéå±€ãäžã«ç§»åããŸãã updateNewsã確èªããupdateOwnNewsã«ç§»åããŸãã ãã§ãã¯ã®å段éã§ãYiiã¯ãã§ãã¯ããŸããbizRuleã«ãŒã«ãèšå®ãããŠããå Žåãèšå®ãããŠããå ŽåãcheckAccessé¢æ°ã§æå®ããããã©ã¡ãŒã¿ãŒãæž¡ããŸãã
ãã§ãã¯ã¯ã次ã®ããã«æŠç¥çã«è¡šãããšãã§ããŸãã

ãã®å³ã¯ã3ã€ã®ãã¹ãã·ããªãªã瀺ããŠããŸãã
æåã®ã·ããªãªã¯ãæ¿èªããããŠãŒã¶ãŒãèªåã®ãã¥ãŒã¹ãç·šéããããšããå Žåã§ãã ãã®å Žåãäžããäžãžã®ãã§ãã¯ã¯
updateOwnNewsãééã
ãŸã ã ãŸãããŠãŒã¶ãŒIDã¯åãã§ãããããæåããŸãã
2çªç®ã®ã±ãŒã¹ã§ã¯ããŠãŒã¶ãŒã¯ã¢ãã¬ãŒã¿ãŒã®åœ¹å²ãæã£ãŠããŸãã éå±€ã«ã¯
updateOwnNewsã¿ã¹ã¯ããªããããupdateNewsæäœã®ååšã®ã¿ããã§ãã¯ãããŸãã
æ€èšŒã«æåããŸããã
3çªç®ã®ã±ãŒã¹ã§ã¯ãèš±å¯ããããŠãŒã¶ãŒãä»ã®äººã®èšäºãç·šéããããšããŸããã
updateOwnNewsã¹ããŒãžã§ã¯ãã§ãã¯ã倱æããŸãã æºããããŠããªãbizRuleã¿ã¹ã¯ã
äžèšã®äŸã¯ãéäžç®¡çãããæš©å©ç®¡çã瀺ããŠããŸãã
æäœãå®äºããããã«ã³ã³ãããŒã©ãŒã«1åãã§ãã¯ãæžã蟌ã¿ãããã§ãã©ã¡ãŒã¿ãŒãæž¡ãããšã«ãããã¢ã¯ã»ã¹å¶åŸ¡ã«é¢ãã以éã®äœæ¥ã¯ãã¹ãŠRBACã«ä»»ãããŸãã
ãããã£ãŠãå¯èœãªå Žåã¯
åžžã« ãcheckAccessé¢æ°ã«ãã©ã¡ãŒã¿ãŒãæž¡ããŠïŒãã§ãã¯å¯Ÿè±¡ã®ã¢ã€ãã ã«bizRuleããªãå Žåã§ãïŒãããŒã«ã§ã¯ãªãæäœããã§ãã¯ããå¿
èŠããããŸãã
ã³ã³ãããŒã©ãŒå
ã§1ã€ã®æ¡ä»¶ã§è€æ°ã®ãã§ãã¯ãäœæããå Žå-ééã£ãæ¹åã«é²ãã§ããããšãããã£ãŠãã-éå±€ã®ç·šæã«åé¡ãããå Žåã
äŸïŒ
if(Yii:app()->user->checkAccess('moderator') && Yii:app()->user->checkAccess('administrator')) {
ããã¯ééã£ãŠããŸãã ãã®ã¢ãããŒãã§ã¯ãæš©éãäžå
管çã§ããŸããã æ¯åã³ãŒããç·šéããããã«æ°ããæ¡ä»¶ãè¿œå ããå¿
èŠããããŸãã
ã³ã³ãããŒã©ãŒã®æš©éã確èªããæ¹æ³
æš©å©ã確èªããã«ã¯2ã€ã®æ¹æ³ããããŸãã
ãã§ã«æ€èšããæåã®æ¹æ³ã ããã¯ã
CWebUserã³ã³ããŒãã³ãã®
checkAccessïŒïŒã¡ãœããã§ãã
ããããèªåã®ã³ã³ãããŒã©ãŒãã倪ã£ãŠããªããããšãæ°ã«ãã人ã«ã¯ãæš©å©ããã§ãã¯ããå¥ã®
ã¢ã¹ãã¯ãæåã®æ¹æ³ããããŸãã
ãã®æ¹æ³ã¯ããaccessControlããã£ã«ã¿ãŒãã³ã³ãããŒã©ãŒã«æ¥ç¶ããããšã§ãã
ãã®ãã£ã«ã¿ãŒã¯ãã¹ãŠã®æ±ããäœæ¥ãè¡ããŸããã¢ã¯ã»ã¹æš©ã確èªããå¿
èŠã«å¿ããŠãŠãŒã¶ãŒãããŒãž403ã«éä¿¡ããŸãããããã£ãŠãåã¢ã¯ã·ã§ã³ã§æ€èšŒã³ãŒããè€è£œããå¿
èŠã¯ãããŸããã
ãã¥ãŒã¹ã³ã³ãããŒã©ãŒã®äŸã«ãããã£ã«ã¿ãŒãæ€èšããŠãã ããã
class NewsController extends CController { ⊠public function filters() { return array( 'accessControl', ); } public function accessRules() { return array( array('allow', 'actions'=>array('create'), 'roles'=>array('createNews'), ), array('allow', 'actions'=>array('delete'), 'roles'=>array('deleteNews'), ), array('allow', 'actions'=>array('view'), 'roles'=>array('readNews'), ), array('allow', 'actions'=>array('update'), 'roles'=>array('updateNews'), ), ); } ... }
accessRulesé¢æ°
ã§ã¯ã4ã€ã®ã«ãŒã«ãæå®ããŸããåã«ãŒã«ã¯é
åã§ãã
ã¢ã¯ã·ã§ã³ããŒãã«ãŒã«ãé©çšããã¢ã¯ã·ã§ã³ãš
ããŒã«ã®ããŒã瀺ãå Žæã
ããŒããããŒã«ããšåŒã°ãããšããäºå®ã«ãããããããæäœãŸãã¯ã¿ã¹ã¯ã§ãããã«é¢ä¿ãªããããã«ä»»æã®èš±å¯èŠçŽ ãå
¥åã§ããããšã«æ³šæããå¿
èŠããããŸãã ãããããåç¥ã®ããã«ãã³ã³ãããŒã©ãŒã§ã¯æäœ
ã®ã¿ããã§ãã¯ããå¿
èŠããããããäžèšã®äŸã«èšèŒãããŠããã®ã¯ãã®ããã§ãã
ãã®ãã£ã«ã¿ãŒã¯ãã¢ã¯ã·ã§ã³ã®ããã¹ã¹ã«ãŒãã³ãŒãã®å€ãã®è¡ãåãé€ãã®ã«åœ¹ç«ã¡ãŸãã ãã ããåé¡ããããŸããupdateOwnNewsã§å®çŸ©ãããbizRuleãæ£ããæ©èœããããã«ããupdateNewsãã§çŸåšã®ãã¥ãŒã¹ãéä¿¡ããå¿
èŠããããŸãã
ãã©ã¡ãŒã¿ãŒããã£ã«ã¿ãŒã«æž¡ãæ¹æ³ãç解ããããã«ããã¬ãŒã ã¯ãŒã¯ã³ãŒããååŸãããããèŠãå¿
èŠããããŸããã 幞ããªããšã«ãããŒãžã§ã³1.1.11ãããã®ãããªæ©äŒãçŸããŸããã
ãã©ã¡ãŒã¿ãæž¡ãã«ã¯ã次ã®ãããªã«ãŒã«ãèšè¿°ããå¿
èŠããããŸãã
'roles'=>array('newsUpdate'=>array('news'=>$news))
ããããåé¡ã¯ããã ãã§ã¯çµãããŸããã ãã£ã«ã¿ã¯ãã¢ã¯ã·ã§ã³ã®åã«å®è¡ãããŸããã€ãŸããéä¿¡ã§ãããã¥ãŒã¹ãªããžã§ã¯ãããŸã äœæããŠããªãããšãæå³ããŸãã
解決çã¯æ¬¡ã®ã¢ãããŒãã§ãã
protected $model; public function accessRules() { return array( ... array('allow', 'actions' => array('update'), 'roles' => array( 'updateNews' => array( 'news' => $this->news )), ), ... ); } public function getNews() { if ($this->actionParams['id']) { return $this->loadModel($this->actionParams['id']); } } public function loadModel($id) { if ($this->model === null) $this->model = News::model()->findByPk($id); if ($this->model === null) throw new CHttpException(404, 'The requested page does not exist.'); return $this->model; }
ããã§ã¯ãloadModelé¢æ°ã䜿çšããŠããã¥ãŒã¹ã¢ãã«çšã®ãã¥ãŒã¹ãã£ãŒã«ãã®ã²ãã¿ãŒãäœæããŸãã ããããããŒã¿ããŒã¹ãæ°åãã«ããªãããã«ïŒæš©éããã§ãã¯ããæåãšã¢ã¯ã·ã§ã³èªäœã§ïŒãã¢ãã«ããã£ãã·ã¥ããããã©ã€ããŒããã£ãŒã«ã$ã¢ãã«ãäœæããŸããã次ã«loadModelé¢æ°ã«ã¢ã¯ã»ã¹ãããšãããããã£ããã¢ãã«ãååŸãããŸããããŒã¹ããã§ã¯ãããŸããã
æ®å¿µãªãããååãšããŠãããè€éãªããžãã¯ãå¿
èŠãšãããã©ã¡ãŒã¿ãŒãéä¿¡ããå¿
èŠãããå Žåããã®æ¹æ³ã¯é©ããŠããŸããã ãããã£ãŠããã®ãããªå ŽåãcheckAccessïŒïŒã䜿çšããããšã¯æ®ããŸãã
RBAC Yiiããã³LDAP
LDAPã¯ã軜éãã£ã¬ã¯ããªã¢ã¯ã»ã¹ãããã³ã«ã§ãããã軜éãã£ã¬ã¯ããªã¢ã¯ã»ã¹ãããã³ã«ãã§ãã ãã®å ŽåããŠãŒã¶ãŒåãšãã¹ã¯ãŒãã䜿çšããŠäŒæ¥ãããã¯ãŒã¯ãããŠãŒã¶ãŒãèªèšŒããããã«ãActiveDirectoryãã£ã¬ã¯ããªã«ã¢ã¯ã»ã¹ããŸãã
PHPã«ã¯LDAPãµããŒããçµã¿èŸŒãŸããŠãããããäœãçºæããå¿
èŠã¯ãããŸããããŸãããã£ã¬ã¯ããªã«ã¢ã¯ã»ã¹ããããã®äŸ¿å©ãªã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããæ¢è£œã®ã³ã³ããŒãã³ããå€æ°ãããŸãã
adLdapã³ã³ããŒãã³ãã䜿çšããŸããã ActiveDirectoryçšã«ç¹å¥ã«èšèšãããŠãããã·ã³ãã«ã§äŸ¿å©ãªOOP APIãæäŸããŸãããŸããããã䜿çšããã®ã¯çŽ æŽãããããšã§ãã
å§ããããã«ãadLdapãã¢ããªã±ãŒã·ã§ã³ã³ã³ããŒãã³ããšããŠYiiã«æ¥ç¶ããŸããã
LdapComponentã¯ã©ã¹èªäœïŒ
AdLdapã¯ããã®ããããã£ããªãŒããŒã©ã€ãããããšã«ããæ§æãããŸãã Yiiããã°ã©ããŒã«éŠŽæã¿ã®ãã圢åŒã§configã®ãã®ã³ã³ããŒãã³ãã®èšå®ãè¡ãããã®ã§ãå¯èŠå±æ§ãå€æŽããŠïŒYiiãã³ã³ããŒãã³ããæ§æã§ããããã«ïŒå¿
èŠãªãã£ãŒã«ããåå®çŸ©ããã³ã³ã¹ãã©ã¯ã¿ãŒãinitïŒïŒã¡ãœããã«è»¢éããŠã³ã³ã¹ãã©ã¯ã¿ãŒãAFTERãšåŒã°ããããã«ããŸãããªããžã§ã¯ããæ§æãããŸãïŒãã£ãŒã«ãããã£ã±ãã«ãªããŸãïŒã
ããã«ããã®ã³ã³ããŒãã³ããYiiã®ä»ã®ãã¹ãŠã®ã³ã³ããŒãã³ããšåãããã«äœ¿çšã§ããŸãã
Yii::app()->ldap
LDAPã䜿çšããèªå¯ã®å ŽåãYiiã§èªå¯ã«å¿
èŠãªæšæºã³ã³ããŒãã³ã
UserIdentityããã³
WebUserãäœæããå¿
èŠããããŸãã
äžèšã®ã³ãŒãã§ã¯ãæ¿èªããžãã¯ãå®è£
ããããã«ãCUserIdentityã¯ã©ã¹ã®èªèšŒã¡ãœãããåå®çŸ©ããŠããŸãã adLdapãä»ããŠADã§ãã®ãŠãŒã¶ãŒãèªèšŒããããšããŠããŸããæåããå Žåã¯ããŠãŒã¶ãŒã®ååãšã¡ãŒã«ãæ°žç¶çãªã¹ãã¬ãŒãžã«æ ŒçŽããŸãã
LDAPã«å ããŠããŠãŒã¶ãŒã«é¢ããè¿œå æ
å ±ãããŒã¿ããŒã¹ã«ä¿åããããšã«ããŸããããã®ãããèªèšŒã«æåããåŸããã§ãã¯ãããŸãããã®ãŠãŒã¶ãŒã®ããŒã¿ããŒã¹ã«ãã§ã«è¡ããããããã§ãªãå Žåã¯äœæãããŸãã
LdapUserã¯ã©ã¹ã¯ãéèŠãªæ©èœã§ããLdapUser :: getGroupsïŒïŒãé€ããŠãæšæºãšã»ãšãã©å€ãããŸããã ãæ³åã®ãšããããã®é¢æ°ã¯ADãããã®ãŠãŒã¶ãŒã®ãã¹ãŠã®ã°ã«ãŒããè¿ããŸãã
Yiiã¢ããªã±ãŒã·ã§ã³ã®ActiveDirectoryããŒã«ã§ãŠãŒã¶ãŒã°ã«ãŒããäœæããããšã«ããŸããã
ã€ãŸã ç¹å®ã®ãŠãŒã¶ãŒã§ã¯ãªãã°ã«ãŒãã«ããŒã«ãå²ãåœãŠãŸãã ãããŠãã©ã®ã°ã«ãŒããADãéããŠäžå
çã«èª°ã«å²ãåœãŠãããŸãã
äŒæ¥ããŒã¿ã«ãä»ã®å
éšãªãœãŒã¹ã§ã¯éåžžã«äŸ¿å©ã§ãã ããªã³ã¿ãŒããã©ã«ããŒãããã³ãã®ä»ã®ãªãã£ã¹ã€ã³ãã©ã¹ãã©ã¯ãã£ã«å¯Ÿããæš©éãšå
±ã«ããŠãŒã¶ãŒã«ã¯äŒæ¥Webãµã€ãã®ã»ã¯ã·ã§ã³ã«å¯Ÿããæš©éãçŽã¡ã«ä»äžãããŸãã åæã«ãITéšéã®ã¹ãã·ã£ãªã¹ãã¯äœã説æããå¿
èŠã¯ãªããããã€ãã®ããã«ãäœæ¥ãè¡ãã ãã§ãã
ãŠãŒã¶ãŒã«ããŒã«ãå²ãåœãŠãããã«ãCPhpAuthManagerã¯ã©ã¹ãåå®çŸ©ããŸããã
class PhpAuthManager extends CPhpAuthManager { public function init() {
äžèšã®ã³ãŒãã§ã¯ããŠãŒã¶ãŒãå±ããã°ã«ãŒãã®ãªã¹ããååŸããåãååã®ããŒã«ãååšãããã©ããã確èªããŸããååšããå Žåã¯ããŠãŒã¶ãŒã«ããŒã«ãå²ãåœãŠãŸãã
LDAPã䜿çšããèš±å¯æ§æãã¡ã€ã«ã®äŸã¯æ¬¡ã®ããã«ãªããŸãã
... 'newsReader' => array( 'type' => CAuthItem::TYPE_ROLE, 'description' => '', 'bizRule' => NULL, 'data' => NULL, 'children' => array( 0 => 'readNews', ), ), 'newsAuthor' => array( 'type' => CAuthItem::TYPE_ROLE, 'description' => '', 'bizRule' => NULL, 'data' => NULL, 'children' => array( 'newsReader', 'createNews', 'updateOwnNews', 'deleteOwnNews' ), ), 'newsManager' => array( 'type' => CAuthItem::TYPE_ROLE, 'description' => '', 'bizRule' => NULL, 'data' => NULL, 'children' => array( 'newsReader', 'createNews', 'updateNews', 'deleteNews', ), ),
ROLESã»ã¯ã·ã§ã³ã§ã¯ããäžéãããŒã«ã«ã€ããŠèª¬æããŸãã 次ã«ãã圹å²ã®å²ãåœãŠãã»ã¯ã·ã§ã³ã§ãADã®ã°ã«ãŒãã«ã€ããŠèª¬æãããããã«äžéã®åœ¹å²ãå²ãåœãŠãŸãã
äžèšã®èšå®ã¯æ¬¡ã®ããã«èªãããšãã§ããŸãïŒ
éçºè
ã°ã«ãŒãã®å Žåããã¥ãŒã¹ïŒnewsManagerïŒããã³ã¢ããªã±ãŒã·ã§ã³ïŒrequestManagerïŒãå«ããã¹ãŠã®ã¢ã¯ã·ã§ã³ã䜿çšå¯èœã«ãªãã
departamentBossã°ã«ãŒãã®å Žåãã¢ããªã±ãŒã·ã§ã³ã®äœæã®ã¿ã䜿çšå¯èœã«ãªããŸãã
ãããã«
Yiiã®ããŒã«ã¡ã«ããºã ã¯ãé©åã«äœ¿çšããã°æ¬åœã«æè»ã§ãã
å°æ¥ã®èšç»ã«ã¯ãGUIããŒã«ç®¡çãœãªã¥ãŒã·ã§ã³ã®äœæãŸãã¯é©å¿ãå«ãŸããŸãã å°æ°ã®ã¢ã¯ã·ã§ã³ã§ããã·ã¹ãã ã¯æ··ä¹±ããæžã蟌ã¿ã®éã¯äžåœã«ãªããŸãã
ãã¹ãŠã®ãŠãŒã¶ãŒã«ãYiiãããžã§ã¯ãã§æš©å©ç®¡çã·ã¹ãã ãã©ã®ããã«å®è£
ãããããããŠå人çãªçµéšããåŸãã©ã®ãããªãã³ããä»ã®äººã«åœ¹ç«ã€ããè°è«ããããšããå§ãããŸãã
ä»ã«èªããã®ïŒ