(User Management and Authentication)

Một phần của tài liệu Lập trình Drupal, Zend Framework, Yii Framework (Trang 28 - 31)

Khi chúng ta sử dụng công cụ yiic command, chúng ta nhận được hàm đăng nhập(login) mức cơ bản với công cụ tạo sẵn cho chúng ta. Trang đăng nhập cho phép người dùng truy nhập với 2 hình thức tài khoản (admin/admin) (demo/demo)

Chúng ta cần làm một số thay đổi điều chỉnh sao cho chúng ta quản lýđược nhiều người dùng.Điều này sẽ khiến ta phải mở rộng thêm bảng người dùng (table user) và thêm các chức năng cần thiết để quản lý.

TẠO CRUD của table User

Navigate to the Gii tool via http://localhost/trackstar/index.php?r=gii  and choose the Model

Generator link. Leave the table prefix as tbl. Fill in the Table Name field as tbl_user, which will

auto-populate the Model Class name field as User .Click preview -> generate.

Navigate  to  the  tool  via  http://localhost/trackstar/index.php?r=gii. 2. Choose the Crud Generator link from the list of available generators.

3. Type in User for the Model Class name field. The corresponding Controller ID will auto-populate with user.->preview->generate. auto-populate with user.->preview->generate.

Gõ  http://localhost/trackstar/index.php?r=user    để  xem  kết  quả  hiển  thị.   Cập nhật kiểm tra lịch sử các cột (columns).

Như tất cả các thực thể của chúng tôi bảng tbl_project, tbl_issue, tbl_user có các cột tương tự quy định, chúng tôi sẽ thêm vào các logic cần thiết cho một lớp cơ sở chung và sau đó có mỗi của các lớp cá nhân AR mở rộng từ lớp cơ sở mới này.

Lý do chúng ta đang tạo lớp mới này, thay vì chỉ cần thêm logic trực tiếp vào model class project, là bởi vì các class khác, model Issue và User, cũng cần logic này. Thay vì lặp lại trong các mã trong tất cả các lớp mô hình AR, cách tiếp cận này sẽ cho phép chúng tôi để thiết lập các lĩnh vực này cho tất cả các lớp mô hình AR chỉ trong một nơi. Chúng tôi cũng sẽ làm cho lớp trừu tượng mới, vì nó không nên được khởi tạo trực tiếp.

Tạo  file  mới:  trong    protected/models/  tạo  CheckUserActiveRecord.php  

<?php  

abstract  class  CheckUserActiveRecord  extends  CActiveRecord   {    

/**    

*  Prepares  create_time,  create_user_id,  update_time  and  update_user_id  attributes  before  performing   validation.    

*/    

{    

if($this-­‐>isNewRecord)     {    

//  set  the  create  date,  last  updated  date  and  the  user  doing  the  creating     $this-­‐>create_time=$this-­‐>update_time=new  CDbExpression('NOW()');   $this-­‐>create_user_id=$this-­‐>update_user_id=Yii::app()-­‐>user-­‐>id;     }    

else     {    

//not  a  new  record,  so  just  set  the  last  updated  time  and  last  updated  user  id     $this-­‐>update_time=new  CDbExpression('NOW()');     $this-­‐>update_user_id=Yii::app()-­‐>user-­‐>id;     }     return  parent::beforeValidate();     }   }  

Ởđây chúng ta đang ghi đè phương thức CactiveRecord::beforeValidate().Đây là phương thức giúp người sử dụng có thể tùy biến quá trình truy cập.

nếu bạn không thực hiện sai một tham số khi gọi phương thức save () trên một lớp AR, quá trình xác thực sẽđược kích hoạt. Quá trình này thực hiện xác thực theo quy định trong phương pháp rules () trong lớp AR. Có hai phương pháp tiếp xúc cho phép chúng ta để khai thác các công việc xác nhận và thực hiện bất kỳ logic cần thiết, hoặc ngay trước hoặc ngay sau khi xác nhận được thực hiện: beforeValidate () và afterValidate (). Chú ý: Sử dụng NOW () trong mã trước đó là cụ thể cho MySQL. Điều này có thể làm việc nếu bạn đang theo cùng cách sử dụng một cơ sở dữ liệu khác nhau. Bạn luôn có thể có một cách tiếp cận khác nhau để thiết lập giá trị này. Ví dụ, bằng cách sử dụng chức năng thời gian PHP và định dạng nó một cách thích hợp cho loại dữ liệu của cột: $ this-> createTime = $ this-> updateTime = ngày ("Ymd H: i: s, time());

bây giờ chúng ta cần phải thay đổi 3 class hiện có của AR là -Project.php, User.php, và Issue.php để mở rộng từ lớp trừu tượng hơn là trực tiếp từ CActiveRecord.3 class này nằm trong protected/models/.

Chúng ta thay thế :

class  Project  extends  CActiveRecord   {  

Thay ổi thành

class  Project  extends  CheckUserActiveRecord   {  

Tương tự với 2 class user và issue.

Định nghĩa lần lượt các trường dữ liệu trong form nằm trong :  

protected/views/project/_form.php  và protected/views/user/_form.php   protected/views/issue/_form.php,

Loại  bỏ  các  trường  dữ  liệu  như  sau:   <div  class="row">    

<?php  echo  $form-­‐>textField($model,'create_time');  ?>     <?php  echo  $form-­‐>error($model,'create_time');  ?>     </div>     <div  class="row">     <?php  echo  $form-­‐>labelEx($model,'create_user_id');  ?>     <?php  echo  $form-­‐>textField($model,'create_user_id');  ?>     <?php  echo  $form-­‐>error($model,'create_user_id');  ?>     </div>     <div  class="row">     <?php  echo  $form-­‐>labelEx($model,'update_time');  ?>     <?php  echo  $form-­‐>textField($model,'update_time');  ?>     <?php  echo  $form-­‐>error($model,'update_time');  ?>     </div>     <div  class="row">     <?php  echo  $form-­‐>labelEx($model,'update_user_id');  ?>     <?php  echo  $form-­‐>textField($model,'update_user_id');  ?>     <?php  echo  $form-­‐>error($model,'update_user_id');  ?>     </div>  

Từ  form  user  trong  :  protected/views/user/_form.php      chúng  ta  xóa  bỏ  thuộc  tính   last  login  time  

<div  class="row">    

<?php  echo  $form-­‐>labelEx($model,'last_login_time');  ?>     <?php  echo  $form-­‐>textField($model,'last_login_time');  ?>     <?php  echo  $form-­‐>error($model,'last_login_time');  ?>   </div>  

chúng ta cũng nên loại bỏ các quy tắc xác nhận quy định cho các trường này trong các method quy tắc liên quan

Trong method User::rules()  method, xóa i 2 rules sau:

array('create_user_id,  update_user_id',  'numerical',  'integerOnly'=>true),   array('last_login_time,  create_time,  update_time',  'safe'),    

Làm tương tự với 2 model còn lại là :project, issue. Xóa bỏ các trường liên quan tới dữ liệu vừa xóa.

Thêm trường xác thực mật khẩu: Thêm lên bên đầu trang user:

public  $password_repeat;  

User::rules()  method thêm :

array('password',  'compare'),   array('password_repeat',  'safe'),  

<div class="row"> <?php echo $form->label($model,'password_repeat'); ?> <?php echo $form->passwordField($model,'password_repeat',array('size'=>60,'maxlength'=>256)); ?> <?php echo $form->error($model,'password_repeat'); ?> </div> Mã hóa mật khẩu:

Mở CheckUserActiveRecord trong protected/models/ và thực hiện:

/**    

*  perform  one-­‐way  encryption  on  the  password  before  we  store  it  in  the  database     */    

protected  function  afterValidate()     {    

parent::afterValidate();    

$this-­‐>password  =  $this-­‐>encrypt($this-­‐>password);     }    

public  function  encrypt($value)     {    

return  md5($value);     }  

Một phần của tài liệu Lập trình Drupal, Zend Framework, Yii Framework (Trang 28 - 31)

Tải bản đầy đủ (PDF)

(78 trang)