Browse Source

User and LoginForm are now common models, User is AR and Identity

tags/2.0.0-beta
Alexander Makarov 12 years ago
parent
commit
75917e2cb1
  1. 2
      apps/advanced/backstage/config/main.php
  2. 30
      apps/advanced/backstage/controllers/SiteController.php
  3. 2
      apps/advanced/backstage/views/layouts/main.php
  4. 16
      apps/advanced/backstage/views/site/about.php
  5. 46
      apps/advanced/backstage/views/site/contact.php
  6. 2
      apps/advanced/common/models/LoginForm.php
  7. 114
      apps/advanced/common/models/User.php
  8. 2
      apps/advanced/frontend/config/main.php
  9. 4
      apps/advanced/frontend/controllers/SiteController.php
  10. 61
      apps/advanced/frontend/models/User.php

2
apps/advanced/backstage/config/main.php

@ -19,7 +19,7 @@ return array(
'cache' => $params['components.cache'], 'cache' => $params['components.cache'],
'user' => array( 'user' => array(
'class' => 'yii\web\User', 'class' => 'yii\web\User',
'identityClass' => 'app\models\User', 'identityClass' => 'common\models\User',
), ),
'assetManager' => array( 'assetManager' => array(
'bundles' => require(__DIR__ . '/assets.php'), 'bundles' => require(__DIR__ . '/assets.php'),

30
apps/advanced/backstage/controllers/SiteController.php

@ -4,20 +4,10 @@ namespace backstage\controllers;
use Yii; use Yii;
use yii\web\Controller; use yii\web\Controller;
use app\models\LoginForm; use common\models\LoginForm;
use app\models\ContactForm;
class SiteController extends Controller class SiteController extends Controller
{ {
public function actions()
{
return array(
'captcha' => array(
'class' => 'yii\web\CaptchaAction',
),
);
}
public function actionIndex() public function actionIndex()
{ {
echo $this->render('index'); echo $this->render('index');
@ -40,22 +30,4 @@ class SiteController extends Controller
Yii::$app->getUser()->logout(); Yii::$app->getUser()->logout();
Yii::$app->getResponse()->redirect(array('site/index')); Yii::$app->getResponse()->redirect(array('site/index'));
} }
public function actionContact()
{
$model = new ContactForm;
if ($this->populate($_POST, $model) && $model->contact(Yii::$app->params['adminEmail'])) {
Yii::$app->session->setFlash('contactFormSubmitted');
Yii::$app->response->refresh();
} else {
echo $this->render('contact', array(
'model' => $model,
));
}
}
public function actionAbout()
{
echo $this->render('about');
}
} }

2
apps/advanced/backstage/views/layouts/main.php

@ -31,8 +31,6 @@ $this->registerAssetBundle('app');
'options' => array('class' => 'nav'), 'options' => array('class' => 'nav'),
'items' => array( 'items' => array(
array('label' => 'Home', 'url' => array('/site/index')), array('label' => 'Home', 'url' => array('/site/index')),
array('label' => 'About', 'url' => array('/site/about')),
array('label' => 'Contact', 'url' => array('/site/contact')),
Yii::$app->user->isGuest ? Yii::$app->user->isGuest ?
array('label' => 'Login', 'url' => array('/site/login')) : array('label' => 'Login', 'url' => array('/site/login')) :
array('label' => 'Logout (' . Yii::$app->user->identity->username .')' , 'url' => array('/site/logout')), array('label' => 'Logout (' . Yii::$app->user->identity->username .')' , 'url' => array('/site/logout')),

16
apps/advanced/backstage/views/site/about.php

@ -1,16 +0,0 @@
<?php
use yii\helpers\Html;
/**
* @var yii\base\View $this
*/
$this->title = 'About';
$this->params['breadcrumbs'][] = $this->title;
?>
<h1><?php echo Html::encode($this->title); ?></h1>
<p>
This is the About page. You may modify the following file to customize its content:
</p>
<code><?php echo __FILE__; ?></code>

46
apps/advanced/backstage/views/site/contact.php

@ -1,46 +0,0 @@
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\widgets\Captcha;
/**
* @var yii\base\View $this
* @var yii\widgets\ActiveForm $form
* @var app\models\ContactForm $model
*/
$this->title = 'Contact';
$this->params['breadcrumbs'][] = $this->title;
?>
<h1><?php echo Html::encode($this->title); ?></h1>
<?php if (Yii::$app->session->hasFlash('contactFormSubmitted')): ?>
<div class="alert alert-success">
Thank you for contacting us. We will respond to you as soon as possible.
</div>
<?php return; endif; ?>
<p>
If you have business inquiries or other questions, please fill out the following form to contact us. Thank you.
</p>
<?php $form = ActiveForm::begin(array(
'options' => array('class' => 'form-horizontal'),
'fieldConfig' => array('inputOptions' => array('class' => 'input-xlarge')),
)); ?>
<?php echo $form->field($model, 'name')->textInput(); ?>
<?php echo $form->field($model, 'email')->textInput(); ?>
<?php echo $form->field($model, 'subject')->textInput(); ?>
<?php echo $form->field($model, 'body')->textArea(array('rows' => 6)); ?>
<?php
$field = $form->field($model, 'verifyCode');
echo $field->begin()
. $field->label()
. Captcha::widget()
. Html::activeTextInput($model, 'verifyCode', array('class' => 'input-medium'))
. $field->error()
. $field->end();
?>
<div class="form-actions">
<?php echo Html::submitButton('Submit', null, null, array('class' => 'btn btn-primary')); ?>
</div>
<?php ActiveForm::end(); ?>

2
apps/advanced/frontend/models/LoginForm.php → apps/advanced/common/models/LoginForm.php

@ -1,6 +1,6 @@
<?php <?php
namespace frontend\models; namespace common\models;
use Yii; use Yii;
use yii\base\Model; use yii\base\Model;

114
apps/advanced/common/models/User.php

@ -1,42 +1,58 @@
<?php <?php
namespace common\models; namespace common\models;
class User extends \yii\base\Object implements \yii\web\Identity use yii\db\ActiveRecord;
use yii\helpers\SecurityHelper;
use yii\web\Identity;
/**
* Class User
* @package common\models
*
* @property integer $id
* @property string $username
* @property string $password_hash
* @property string $email
* @property string $auth_key
* @property integer $role
* @property integer $status
* @property integer $create_time
* @property integer $update_time
*/
class User extends ActiveRecord implements Identity
{ {
public $id; /**
public $username; * @var string the raw password. Used to collect password input and isn't saved in database
*/
public $password; public $password;
public $authKey;
const STATUS_DELETED = 0;
private static $users = array( const STATUS_ACTIVE = 10;
'100' => array(
'id' => '100', const ROLE_USER = 10;
'username' => 'admin',
'password' => 'admin', public function behaviors()
'authKey' => 'test100key', {
), return array(
'101' => array( 'timestamp' => array(
'id' => '101', 'class' => 'yii\behaviors\AutoTimestamp',
'username' => 'demo', 'attributes' => array(
'password' => 'demo', ActiveRecord::EVENT_BEFORE_INSERT => 'create_time',
'authKey' => 'test101key', ActiveRecord::EVENT_BEFORE_INSERT => 'update_time',
), ActiveRecord::EVENT_BEFORE_UPDATE => 'update_time',
); ),
),
);
}
public static function findIdentity($id) public static function findIdentity($id)
{ {
return isset(self::$users[$id]) ? new self(self::$users[$id]) : null; return static::find($id);
} }
public static function findByUsername($username) public static function findByUsername($username)
{ {
foreach (self::$users as $user) { return static::find(array('username' => $username, 'status' => static::STATUS_ACTIVE));
if (strcasecmp($user['username'], $username) === 0) {
return new self($user);
}
}
return null;
} }
public function getId() public function getId()
@ -46,16 +62,54 @@ class User extends \yii\base\Object implements \yii\web\Identity
public function getAuthKey() public function getAuthKey()
{ {
return $this->authKey; return $this->auth_key;
} }
public function validateAuthKey($authKey) public function validateAuthKey($authKey)
{ {
return $this->authKey === $authKey; return $this->auth_key === $authKey;
} }
public function validatePassword($password) public function validatePassword($password)
{ {
return $this->password === $password; return SecurityHelper::validatePassword($password, $this->password_hash);
}
public function rules()
{
return array(
array('username', 'filter', 'filter' => 'trim'),
array('username', 'required'),
array('username', 'length', 'min' => 2, 'max' => 255),
array('email', 'filter', 'filter' => 'trim'),
array('email', 'required'),
array('email', 'email'),
array('email', 'unique', 'message' => 'This email address has already been taken.'),
array('password', 'required'),
array('password', 'length', 'min' => 6),
);
}
public function scenarios()
{
return array(
'signup' => array('username', 'email', 'password'),
'login' => array('username', 'password'),
);
}
public function beforeSave($insert)
{
if(parent::beforeSave($insert)) {
if($this->isNewRecord) {
if(!empty($this->password)) {
$this->password_hash = SecurityHelper::generatePasswordHash($this->password);
}
}
return true;
}
return false;
} }
} }

2
apps/advanced/frontend/config/main.php

@ -19,7 +19,7 @@ return array(
'cache' => $params['components.cache'], 'cache' => $params['components.cache'],
'user' => array( 'user' => array(
'class' => 'yii\web\User', 'class' => 'yii\web\User',
'identityClass' => 'app\models\User', 'identityClass' => 'common\models\User',
), ),
'assetManager' => array( 'assetManager' => array(
'bundles' => require(__DIR__ . '/assets.php'), 'bundles' => require(__DIR__ . '/assets.php'),

4
apps/advanced/frontend/controllers/SiteController.php

@ -4,8 +4,8 @@ namespace frontend\controllers;
use Yii; use Yii;
use yii\web\Controller; use yii\web\Controller;
use app\models\LoginForm; use common\models\LoginForm;
use app\models\ContactForm; use frontend\models\ContactForm;
class SiteController extends Controller class SiteController extends Controller
{ {

61
apps/advanced/frontend/models/User.php

@ -1,61 +0,0 @@
<?php
namespace frontend\models;
class User extends \yii\base\Object implements \yii\web\Identity
{
public $id;
public $username;
public $password;
public $authKey;
private static $users = array(
'100' => array(
'id' => '100',
'username' => 'admin',
'password' => 'admin',
'authKey' => 'test100key',
),
'101' => array(
'id' => '101',
'username' => 'demo',
'password' => 'demo',
'authKey' => 'test101key',
),
);
public static function findIdentity($id)
{
return isset(self::$users[$id]) ? new self(self::$users[$id]) : null;
}
public static function findByUsername($username)
{
foreach (self::$users as $user) {
if (strcasecmp($user['username'], $username) === 0) {
return new self($user);
}
}
return null;
}
public function getId()
{
return $this->id;
}
public function getAuthKey()
{
return $this->authKey;
}
public function validateAuthKey($authKey)
{
return $this->authKey === $authKey;
}
public function validatePassword($password)
{
return $this->password === $password;
}
}
Loading…
Cancel
Save