unchanged
Title
Installing Yii Users and Rights to Newly Created Yii app
After creating an yii app . we need to implement permission, Authentication and Authorization .so the best way is to use the Yii users and Rights modules. its very simple to install these modules Download -------- Download the yii-user [user](http://www.yiiframework.com/extension/yii-user/ "user") and rights [rights](http://www.yiiframework.com/extension/rights/ "rights") extensions and unzip them. unzip ----- unzip the modules to /your-app/protected/modules/user /your-app/protected/modules/rights Create tables for user module ----------------------------- then goto /protected/modules/user/data/schema.mysql.sqlNeed** Need to update schema.mysql.sql to create field `lastvist_at` instead of `lastvist` open the sql file ,and create the tables manually(that i prefer) , remove the 'tbl_' prefix from the tables(i prefer) configure --------- then configure the config/main under import ~~~ [php] 'import'=>array( ... 'application.modules.user.models.*', 'application.modules.user.components.*', 'application.modules.rights.*', 'application.modules.rights.components.*', ... ), ~~~ under modules ~~~ [php] 'modules'=>array( 'user'=>array( 'tableUsers' => 'users', 'tableProfiles' => 'profiles', 'tableProfileFields' => 'profiles_fields', ), 'rights'=>array( 'install'=>true, ), ), ~~~ under components ~~~ [php] 'components'=>array( 'user'=>array( 'class'=>'RWebUser', // enable cookie-based authentication 'allowAutoLogin'=>true, 'loginUrl'=>array('/user/login'), ), 'authManager'=>array( 'class'=>'RDbAuthManager', 'connectionID'=>'db', 'defaultRoles'=>array('Authenticated', 'Guest'), ), ), ~~~ after saving the main config file install Rights module --------------------- install the rights so that you have to login to user/login (according to your url style) your-app/index.php/rights/install or your-app/index.php?r=rights/install after successful installation change the main config file --------------------------- change the main config file to under modules ~~~ [php] 'user'=>array( 'tableUsers' => 'users', 'tableProfiles' => 'profiles', 'tableProfileFields' => 'profiles_fields', # encrypting method (php hash function) 'hash' => 'md5', # send activation email 'sendActivationMail' => true, # allow access for non-activated users 'loginNotActiv' => false, # activate user on registration (only sendActivationMail = false) 'activeAfterRegister' => false, # automatically login from registration 'autoLogin' => true, # registration path 'registrationUrl' => array('/user/registration'), # recovery password path 'recoveryUrl' => array('/user/recovery'), # login form path 'loginUrl' => array('/user/login'), # page after login 'returnUrl' => array('/user/profile'), # page after logout 'returnLogoutUrl' => array('/user/login'), ), //Modules Rights 'rights'=>array( 'superuserName'=>'Admin', // Name of the role with super user privileges. 'authenticatedName'=>'Authenticated', // Name of the authenticated user role. 'userIdColumn'=>'id', // Name of the user id column in the database. 'userNameColumn'=>'username', // Name of the user name column in the database. 'enableBizRule'=>true, // Whether to enable authorization item business rules. 'enableBizRuleData'=>true, // Whether to enable data for business rules. 'displayDescription'=>true, // Whether to use item description instead of name. 'flashSuccessKey'=>'RightsSuccess', // Key to use for setting success flash messages. 'flashErrorKey'=>'RightsError', // Key to use for setting error flash messages. 'baseUrl'=>'/rights', // Base URL for Rights. Change if module is nested. 'layout'=>'rights.views.layouts.main', // Layout to use for displaying Rights. 'appLayout'=>'application.views.layouts.main', // Application layout. 'cssFile'=>'rights.css', // Style sheet file to use for Rights. 'install'=>false, // Whether to enable installer. 'debug'=>false, ), ~~~ Your application is now ready . change main layout ------------------ change the main layout. ~~~ [php] $this->widget('zii.widgets.CMenu',array( 'items'=>array( array('label'=>'Home', 'url'=>array('/site/index')), array('label'=>'About', 'url'=>array('/site/page', 'view'=>'about')), array('label'=>'Contact', 'url'=>array('/site/contact')), array('label'=>'Login', 'url'=>array('/user/login'), array('label'=>'Rights', 'url'=>array('/rights'), 'visible'=>Yii::app()->user->isGuest), array('label'=>'Logout ('.Yii::app()->user->name.')', 'url'=>array('/user/logout'), 'visible'=>!Yii::app()->user->isGuest) ),)));)); ~~~Add rights ---------- Then add rights filter to all controller like ~~~ [php] public function filters() { return array( 'rights', // perform access control for CRUD operations ); } ~~~ and change the extended controller to 'extends RController'. then take rights in your url(according to url style) .