php权限管理,PHP面向对象之旅:用户权限管理类

在上一章,我们写了一个建立用户user类,直接使用user类读取用户信息的类。假设我们又有了新的需求。

任何用户都可以查看别的用户的信息,当然不能看到别人的密码。

任何用户都可以修改自己的密码。

于是我们对第一章的类做些改动,首先我们在userInfo类中,将获得密码的方法隐藏。

我们再写一个UserChange类继承自userInfo,在UserChange中增加修改密码的方法。并将获取密码的方法重写为public权限。

这样,在你的页面中,就可以创建两种user。一种是只能看到信息不能看到密码、不能修改密码的userInfo的实例。另外一种是比userInfo功能更强的UserChange类,这个实例可以修改密码,可以获得密码。

在合适的位置创建不同的user,就是你的业务逻辑的内容了。

同时,我们独立出一个数据库连接类,数据库连接类比较完善的网上有很多,大家学习完毕面向对象后,自己也可以写出更完善的数据库类。

数据库配置类 db_config.php

// 数据库配置文件, db_config.php

$db_server = "localhost";

$db_user = "root";

$db_pwd = "123";

$db_name = "test";

?>

Mysql连接类

class MysqlConn {

private $conn;

private $my_db;

private $result;

public function __construct() {

require_once("db_config.php");

$this->conn = mysql_pconnect($db_server, $db_user, $db_pwd);

$this->my_db = mysql_select_db($db_name,$this->conn);//选择数据库

}

public function query($sql){

$this->result = mysql_query($sql, $this->conn); // 执行查询语句

return $this->result;

}

public function next(){

return $row = mysql_fetch_array($this->result);

}

public function close(){

mysql_free_result($this->result);

}

//使用转义字符,保证系统安全.

public function escapeString($str){

return mysql_escape_string($str);

}

}

?>

父类User类

// class_user.php

require_once("class_mysqlConn.php");

class UserInfo{

protected $userName; //属性,用户名

protected $userPSW ; //属性,用户密码

protected $userAge ; //属性,用户年龄

protected $userGrade ; //属性,用户级别

protected $userInfo; //存储数据库返回信息的数组变量.

protected $mysqlConn;

public function __construct($name){

$this->mysqlConn = new MysqlConn();

$sql = "select * from e_user where username='$name' "; //查询的sql

$rs = $this->mysqlConn->query($sql);

$this->userInfo = $this->mysqlConn->next();

$this->getInfo(); //调用传递信息的方法.

}

// 获取信息传递给属性的方法

protected function getInfo(){

$this->userName = $this->userInfo["username"];

$this->userPSW = $this->userInfo["userpsw"];

$this->userAge = $this->userInfo["userage"];

$this->userGrade = $this->userInfo["usergrade"];

}

//返回每个属性的public 方法.

public function getUserName(){

return $this->userName;

}

protected function getUserPSW(){

return $this->userPSW;

}

public function getUserAge(){

return $this->userAge;

}

public function getUserGrade(){

return $this->userGrade;

}

}

?>

子类 class_userChange.php 类

添加了修改密码的方法,重写并公开了获取密码的方法。

// class_userChange.php

require_once("class_user.php");

class UserChange extends UserInfo {

public function setUserPSW($pws){

$pws = $this->mysqlConn->escapeString($pws); // 过滤特殊字符

$username = $this->mysqlConn->escapeString($this->userName);// 过滤

$sql = "Update e_user set userpsw ='$pws' ";

$sql .= " where username = '$username'"; //查询的sql

$rs = $this->mysqlConn->query($sql); //执行

if($rs){

$this->userPSW = $pws;

}

return $rs;

}

public function getUserPSW(){ //重写的getUserPSW方法。

return $this->userPSW;

}

}

?>

在任何位置都可以放心使用userInfo类。

//viewuser.php

require_once("class_user.php");

$user = new UserInfo("Tom"); //创建一个user对象.

$username = $user->getUserName(); //分别调用方法取得数据

$userage = $user->getUserAge();

$usergrade = $user->getUserGrade();

echo "$username name is ".$username."
"; //输出数据

echo "$username age is ".$userage."
" ;

echo "$username grade is ".$usergrade."
" ;

?>

可以重设密码的Userchange类的实例。

$password = "898"; //重设的密码

require_once("class_userChange.php");

$user = new UserChange("Jack"); //创建一个可以修改密码的user对象.

$username = $user->getUserName(); //分别调用方法取得数据

$userpsw = $user->getUserPSW();

$userage = $user->getUserAge();

$usergrade = $user->getUserGrade();

//这些和user类的一样,用起来很舒服。

echo "your name is ".$username."
"; //输出数据

echo "your password is ".$userpsw."
" ;

echo "your age is ".$userage."
" ;

echo "your grade is ".$usergrade."
" ;

//如果设置成功,显示新的密码。

if($user->setUserPSW($password)){

echo "you password be changed to ".$userpsw = $user->getUserPSW();

//这里,密码被重设了。

}

?>

延伸阅读

此文章所在专题列表如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值