使用者群組和使用者類別整合

This commit is contained in:
Yuan Chiu 2014-10-07 18:12:02 +08:00
parent 5c9477ce17
commit 5c7f8991ee
3 changed files with 147 additions and 28 deletions

View File

@ -158,3 +158,38 @@ class GroupNoFoundException extends GroupException {
parent::__construct($groupId, 'Group: "'.$groupId.'" is no found.');
}
}
// ============================================================================
/**
* 使用者群組例外
* @since 2.0.0
* @package UElearning
* @subpackage User
*/
class PermissionNoFoundException extends \UnexpectedValueException {
/**
* 指定的使用者群組ID
* @type string
*/
private $permissionName;
/**
* 使用者帳號例外
* @param string $groupId 輸入的使用者群組ID
* @param string $description 描述
*/
public function __construct($permissionName) {
$this->permissionName = $permissionName;
parent::__construct('No Found Permission: '.$this->permissionName);
}
/**
* 取得輸入的資料庫系統名稱
* @return string 錯誤訊息內容
*/
public function getName() {
return $this->permissionName;
}
}

View File

@ -6,6 +6,8 @@
namespace UElearning\User;
require_once UELEARNING_LIB_ROOT.'/Database/DBUser.php';
require_once UELEARNING_LIB_ROOT.'/User/UserGroupAdmin.php';
require_once UELEARNING_LIB_ROOT.'/User/UserGroup.php';
require_once UELEARNING_LIB_ROOT.'/User/Exception.php';
require_once UELEARNING_LIB_ROOT.'/Exception.php';
require_once UELEARNING_LIB_ROOT.'/Util/Password.php';
@ -25,7 +27,11 @@ use UElearning\Util;
*
* try {
* $user = new User\User('yuan');
* // TODO: 在這邊寫下要針對這位使用者作什麼事?
*
* $user->changePassword('123456');
* echo $user->isPasswordCorrect('123456');
*
* echo 'NickName: '.$user->getNickName();
* }
* catch (User\Exception\UserNoFoundException $e) {
* echo 'No Found user: '. $e->getUserId();
@ -98,6 +104,16 @@ class User {
// ========================================================================
/**
* 取得帳號名稱
*
* @return string 帳號名稱
* @since 2.0.0
*/
public function getId(){
return $this->uId;
}
/**
* 取得帳號名稱
*
@ -170,18 +186,52 @@ class User {
* @since 2.0.0
*/
public function getGroupName(){
// TODO: getGroupName
// 群組ID
$groupID = $this->queryResultArray['group_id'];
// 取得群組名稱
try {
$group = new User\UserGroup($groupID);
return $group->getName();
}
catch (Exception\GroupNoFoundException $e) {
throw $e;
}
}
/**
* 設定所在群組
*
* 範例:
*
* try {
* $user = new User\User('yuan');
* try {
* $user->setGroup('student');
* }
* catch (User\Exception\GroupNoFoundException $e) {
* echo 'No Group to set: '. $e->getGroupId();
* }
* echo $user->getGroup();
* }
* catch (User\Exception\UserNoFoundException $e) {
* echo 'No Found user: '. $e->getUserId();
* }
*
* @param string $toGroup 群組ID
* @since 2.0.0
*/
public function setGroup($toGroup){
// TODO: setGroup
// 檢查有此群組
$groupAdmin = new UserGroupAdmin();
if($groupAdmin->isExist($toGroup)) {
$this->setUpdate('group_id', $toGroup);
}
else {
throw new Exception\GroupNoFoundException($toGroup);
}
}
@ -198,13 +248,13 @@ class User {
}
/**
* 取得所在群組顯名稱
* 取得所在群組顯名稱
*
* @return string 班級名稱
* @since 2.0.0
*/
public function getClassName(){
// TODO: getGroupName
// TODO: 取得所在群組顯示名稱
}
/**
@ -214,9 +264,7 @@ class User {
* @since 2.0.0
*/
public function setClass($toClass){
// TODO: setGroup
// TODO: 設定所在群組
}
// ========================================================================
@ -254,7 +302,7 @@ class User {
* @since 2.0.0
*/
public function getLearnStyle(){
// TODO:
// TODO: 取得這個人的學習導引風格
}
/**
@ -264,7 +312,7 @@ class User {
* @since 2.0.0
*/
public function setLearnStyle($style){
// TODO
// TODO: 設定這個人的學習導引風格
}
@ -276,7 +324,7 @@ class User {
* @since 2.0.0
*/
public function getMaterialStyle(){
// TODO:
// TODO: 取得這個人的教材風格
}
/**
@ -286,7 +334,7 @@ class User {
* @since 2.0.0
*/
public function setMaterialStyle($style){
// TODO
// TODO: 設定這個人的教材風格
}
@ -300,7 +348,7 @@ class User {
* @since 2.0.0
*/
public function getName(){
// TODO: 代修正
// TODO: 待修正-取得名稱
if($this->getNickName() != "") {
return $this->getNickName();
}
@ -408,26 +456,25 @@ class User {
/**
* 取得權限清單
*
* @access public
* @return array 權限清單
* @since 2.0.0
*/
public function getPermissionList() {
$thisGroup = new UserGroup($this->getQueryInfo("GID"));
return $thisGroup->getPermissionList();
}
/**
* 是否擁有此權限
*
* @access public
* @global string $FORM_USER /config/db_table_config.php的使用者資料表名稱
* @global string $FORM_USER_GROUP /config/db_table_config.php的使用者群組資料表名稱
* @param string $permissionName 權限名稱
* @return bool 是否擁有
* @throw UElearning\User\Exception\PermissionNoFoundException
* @since 2.0.0
*/
public function havePermission($permissionName) {
// TODO
$thisGroup = new UserGroup($this->getQueryInfo("GID"));
return $thisGroup->havePermission($permissionName);
}
}

View File

@ -49,6 +49,7 @@ class UserGroup {
* 查詢到此帳號的所有資訊的結果
*
* $this->getQuery() 抓取資料表中所有資訊,並放在此陣列裡
*
* @type array
*/
protected $queryResultArray;
@ -60,6 +61,7 @@ class UserGroup {
* @since 2.0.0
*/
protected function getQuery(){
// 從資料庫查詢群組
$db = new Database\DBUser();
$groupInfo = $db->queryGroup($this->gId);
@ -77,6 +79,7 @@ class UserGroup {
* @since 2.0.0
*/
protected function setUpdate($field, $value){
/// 將新設定寫進資料庫裡
$db = new Database\DBUser();
$db->changeGroupData($this->gId, $field, $value);
@ -138,7 +141,6 @@ class UserGroup {
* @since 2.0.0
*/
public function setName($name){
// 將新設定寫進資料庫裡
$this->setUpdate('name', $name);
}
@ -179,19 +181,54 @@ class UserGroup {
*
* @param string $permissionName 權限名稱
* @return bool 是否擁有
* @throw UElearning\User\Exception\PermissionNoFoundException
* @since 2.0.0
*/
public function havePermission($permissionName) {
// TODO: 是否擁有此權限
switch($permissionName) {
case 'server_admin':
case 'serverAdmin':
case 'ServerAdmin':
return $this->queryResultArray['auth_admin'];
break;
case 'client_admin':
case 'clientAdmin':
case 'ClientAdmin':
return $this->queryResultArray['auth_clientAdmin'];
break;
default:
throw new PermissionNoFoundException('$permissionName');
return false;
}
}
/**
* 設定擁有此權限
*
* @param string $permissionName 權限名稱
* @param string $setBool 是否給予
* @return bool 是否擁有
* @throw UElearning\User\Exception\PermissionNoFoundException
* @since 2.0.0
*/
public function setPermission($permissionName, $setBool) {
// TODO: 設定擁有此權限
switch($permissionName) {
case 'server_admin':
case 'serverAdmin':
case 'ServerAdmin':
$this->setUpdate('auth_admin', $setBool);
break;
case 'client_admin':
case 'clientAdmin':
case 'ClientAdmin':
$this->setUpdate('auth_clientAdmin', $setBool);
break;
default:
throw new PermissionNoFoundException('$permissionName');
}
}
}