diff --git a/README.md b/README.md index d223cdb..ccbcf47 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ #Tips +#참고 : https://github.com/bundanining/Shopping-Cart-Solution-CodeIgniter vscode와 Git의 대소문자 구분시키기 git config core.ignorecase false diff --git a/app/Config/Constants.php b/app/Config/Constants.php index 08431df..ec91a49 100644 --- a/app/Config/Constants.php +++ b/app/Config/Constants.php @@ -152,24 +152,27 @@ define('AUTHS', [ 'TOKEN_NAME' => getenv('auth.google.client.token_name') ? getenv('auth.google.client.token_name') : "access_token", ], ]); - -//SITE_Default 정의 -define('DEFAULTS', [ - 'ROLE' => getenv('default.role') ? getenv('default.role') : "user", - 'STATUS' => getenv('default.status') ? getenv('default.status') : "use", - 'EMPTY' => getenv('default.empty') ? getenv('default.empty') : "", - 'PERPAGE' => getenv('default.perpage') ? getenv('default.perpage') : 20, - 'EXCEL_PATH' => getenv('default.excel_path') ? getenv('default.excel_path') : "../writable/Excel", +//등급 관련 +define('ROLES', [ + 'user' => '일반회원', 'vip' => 'VIP회원', + 'bronze' => '일반판매자', 'silver' => '고급판매자', 'gold' => '파워리셀러', 'mallmaster' => "쇼핑몰관리자", + 'manager' => '관리자', 'cloudflare' => "Cloudflare관리자", 'director' => '감독자', + 'system' => '서버관리자', 'developer' => '개발자', 'master' => "마스터", +]); +define('STATUS', [ + "use" => "사용", + "unuse" => "사용않함", ]); -if (!is_dir(DEFAULTS['EXCEL_PATH'])) { - mkdir(DEFAULTS['EXCEL_PATH'], 0640); -} //Upload , Download 관련 -define('FILES', [ - 'UPLOADS' => ['mode' => 0600, 'path' => 'uploads'], - 'DOWNLOADS' => ['mode' => 0600, 'path' => 'downloads'], +define('PATHS', [ + 'EXCEL' => getenv('path.excel') ? getenv('path.excel') : "../writable/Excel", + 'UPLOADS' => getenv('path.upload') ? getenv('path.upload') : "../writable/uploads", + 'DOWNLOAD' => getenv('path.download') ? getenv('path.download') : "../writable/download", ]); +if (!is_dir(APPPATH . PATHS['EXCEL'])) { + mkdir(APPPATH . PATHS['EXCEL'], 0640); +} //아이콘 및 Sound관련 define('ICONS', [ @@ -184,19 +187,15 @@ define('AUDIOS', [ 'Alram_GetEmail' => '', ]); -//HPILO 관련 -define( - 'HPILOS', - [ - 'PATH' => getenv('hpilo.path') ? getenv('hpilo.path') : "../writable/HPILO", - 'ADAPTER' => getenv('hpilo.adapter') ? getenv('hpilo.adapter') : "\App\Libraries\Adapter\API\GuzzleAdapter", - 'DEBUG' => getenv('hpilo.debug') == 'true' ? true : false, - 'SSL' => getenv('hpilo.ssl') == 'true' ? true : false, - 'GUZZLE_COOKIE' => getenv('hpilo.guzzle.cookie') == 'true' ? true : false, - 'CURL_COOKIE_FILE' => getenv('hpilo.curl.cookie.file') ? getenv('hpilo.curl.cookie.file') : "/cookie.txt", - 'CURL_DEBUG_FILE' => getenv('hpilo.curl.debug.file') ? getenv('hpilo.curl.debug.file') : "/debug.txt", - ] -); -if (!is_dir(HPILOS['PATH'])) { - mkdir(HPILOS['PATH'], 0640); -} +//Default값 정의 +define('DEFAULTS', [ + 'ROLE' => getenv('default.role') ? getenv('default.role') : "user", + 'STATUS' => getenv('default.status') ? getenv('default.status') : "use", + 'EMPTY' => getenv('default.empty') ? getenv('default.empty') : "", + 'PERPAGE' => getenv('default.perpage') ? getenv('default.perpage') : 20, +]); + +define('UUIDS', [ + 'NAMESPACE' => getenv('uuid.namespace') ? getenv('uuid.namespace') : "8fc990b07418d5826d98de952cfb268dee4a23a3", + 'SECRET' => getenv('uuid.secret') ? getenv('default.secret') : "delftstack1", +]); diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 61db587..d66e117 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -30,6 +30,10 @@ $routes->setAutoRoute(false); // We get a performance increase by specifying the default // route since we don't have to scan directories. + +//추가 RULE UUID형식 +$routes->addPlaceholder('uuid', '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'); + $routes->get('/', 'Home::index'); $routes->get('/login', 'Common\AuthController::login'); $routes->post('/signin', 'Common\AuthController::signin/local'); @@ -49,11 +53,11 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au $routes->get('excel', 'UserController::excel'); $routes->get('insert', 'UserController::insert_form', ['filter' => 'authFilter:master,director']); $routes->post('insert', 'UserController::insert', ['filter' => 'authFilter:master,director']); - $routes->get('update/(:num)', 'UserController::update_form/$1'); - $routes->post('update/(:num)', 'UserController::update/$1'); - $routes->get('view/(:num)', 'UserController::view/$1'); - $routes->get('delete/(:num)', 'UserController::delete/$1', ['filter' => 'authFilter:master,director']); - $routes->get('toggle/(:num)/(:hash)', 'UserController::toggle/$1/$2', ['filter' => 'authFilter:master,director']); + $routes->get('update/(:uuid)', 'UserController::update_form/$1'); + $routes->post('update/(:uuid)', 'UserController::update/$1'); + $routes->get('view/(:uuid)', 'UserController::view/$1'); + $routes->get('delete/(:uuid)', 'UserController::delete/$1', ['filter' => 'authFilter:master,director']); + $routes->get('toggle/(:uuid)/(:hash)', 'UserController::toggle/$1/$2', ['filter' => 'authFilter:master,director']); $routes->post('batchjob', 'UserController::batchjob', ['filter' => 'authFilter:master,director']); }); $routes->group('usersns', static function ($routes) { diff --git a/app/Controllers/Admin/UserController.php b/app/Controllers/Admin/UserController.php index 9dd6c2e..527fa1a 100644 --- a/app/Controllers/Admin/UserController.php +++ b/app/Controllers/Admin/UserController.php @@ -16,24 +16,18 @@ class UserController extends \App\Controllers\Admin\AdminController $this->_model = new UserModel(); $this->_defines = [ 'insert' => [ - 'fields' => ['id', 'passwd', 'name', 'email', 'role', 'status'], + 'fields' => ['id', 'passwd', 'confirmpassword', 'name', 'email', 'role', 'status'], 'fieldFilters' => ['role', 'status'], 'fieldRules' => [ - 'id' => 'required|min_length[4]|max_length[20]|is_unique[user.id]', - 'passwd' => 'required|trim|min_length[4]|max_length[130]', - 'name' => 'required|min_length[2]|max_length[20]', - 'email' => 'required|valid_email', - 'role' => 'required|in_list[user,manager,cloudflare,director,master]', + 'id' => 'required|min_length[4]|max_length[20]|is_unique[tw_user.id]', + 'confirmpassword' => 'required|trim|matches[passwd]', ] ], 'update' => [ 'fields' => ['passwd', 'name', 'email', 'role', 'status'], 'fieldFilters' => ['role', 'status'], 'fieldRules' => [ - 'passwd' => 'required|trim|min_length[4]|max_length[30]', - 'name' => 'required|min_length[2]|max_length[20]', - 'email' => 'required|valid_email', - 'role' => 'required|in_list[user,manager,cloudflare,director,master]', + 'confirmpassword' => 'required|trim|matches[passwd]', ] ], 'view' => [ diff --git a/app/Controllers/Admin/UserSNSController.php b/app/Controllers/Admin/UserSNSController.php index f85d619..adec7b5 100644 --- a/app/Controllers/Admin/UserSNSController.php +++ b/app/Controllers/Admin/UserSNSController.php @@ -21,11 +21,7 @@ class UserSNSController extends \App\Controllers\Admin\AdminController 'insert' => [ 'fields' => ['site', 'user_uid', 'name', 'email', 'status'], 'fieldFilters' => ['status'], - 'fieldRules' => [ - 'name' => 'required|min_length[2]|max_length[20]', - 'email' => 'required|valid_email', - 'status' => 'required|in_list[use,unuse]', - ] + 'fieldRules' => [] ], 'index' => [ 'fields' => ['site', 'user_uid', 'name', 'email', 'status', 'created_at'], diff --git a/app/Controllers/Common/CommonController.php b/app/Controllers/Common/CommonController.php index 9427203..860d7ac 100644 --- a/app/Controllers/Common/CommonController.php +++ b/app/Controllers/Common/CommonController.php @@ -10,8 +10,6 @@ use Psr\Log\LoggerInterface; class CommonController extends BaseController { - use \App\Controllers\Trait\CommonTrait; - protected $_className = ''; protected $_model = null; protected $_defines = array(); diff --git a/app/Controllers/Trait/CommonTrait.php b/app/Controllers/Trait/CommonTrait.php deleted file mode 100644 index 5e40fd9..0000000 --- a/app/Controllers/Trait/CommonTrait.php +++ /dev/null @@ -1,7 +0,0 @@ - "수정일", 'created_at' => "작성일" ], - "ROLE" => [ - "user" => "회원", - "manager" => "관리자", - "cloudflare" => "Cloudflare관리자", - "director" => "감독자", - "master" => "마스터" - ], - "STATUS" => [ - "use" => "사용", - "unuse" => "사용않함", - ] + "ROLE" => [...ROLES], + "STATUS" => [...STATUS], ]; diff --git a/app/Language/en/Admin/UserSNS.php b/app/Language/en/Admin/UserSNS.php index 686aef9..82cdd79 100644 --- a/app/Language/en/Admin/UserSNS.php +++ b/app/Language/en/Admin/UserSNS.php @@ -12,9 +12,5 @@ return [ 'created_at' => "작성일" ], "USER_UID" => [], - "STATUS" => [ - "use" => "사용", - "unuse" => "사용않함", - "standby" => "승인대기", - ] + "STATUS" => [...STATUS, "standby" => "승인대기"], ]; diff --git a/app/Models/CommonModel.php b/app/Models/CommonModel.php index 8fb2a18..58a1034 100644 --- a/app/Models/CommonModel.php +++ b/app/Models/CommonModel.php @@ -4,10 +4,11 @@ namespace App\Models; use CodeIgniter\Model; use App\Libraries\Log\Log; +use App\Trait\CommonTrait; class CommonModel extends Model { - use Trait\CommonTrait; + use CommonTrait; protected $DBGroup = 'default'; // protected $table = 'user'; @@ -49,8 +50,10 @@ class CommonModel extends Model Log::add("error", implode("\n", $this->errors())); throw new \Exception(__FUNCTION__ . " 오류 발생.\n" . var_export($this->errors(), true)); } - $pk = $this->primaryKey; - $entity->$pk = $this->insertID(); + if ($this->useAutoIncrement === true) { + $pk = $this->primaryKey; + $entity->$pk = $this->insertID(); + } return $entity; } final protected function modify_process($entity) diff --git a/app/Models/LoggerModel.php b/app/Models/LoggerModel.php index cb3bb9d..88cba00 100644 --- a/app/Models/LoggerModel.php +++ b/app/Models/LoggerModel.php @@ -6,16 +6,16 @@ use App\Entities\LoggerEntity; class LoggerModel extends CommonModel { - protected $table = 'logger'; + protected $table = 'tw_logger'; // protected $primaryKey = 'uid'; // protected $useAutoIncrement = true; - protected $allowedFields = ['user_uid', 'title', 'content', 'status', 'updated_at']; + protected $allowedFields = ['tw_user_uid', 'title', 'content', 'status', 'updated_at']; protected $validationRules = [ 'uid' => 'if_exist|numeric', - 'user_uid' => 'if_exist|numeric', - 'title' => 'if_exist|string', + 'user_uid' => 'required|string', + 'title' => 'required|string', 'content' => 'if_exist|string', - 'status' => 'if_exist|in_list[use,unuse]', + 'status' => 'if_exist|string', 'updated_at' => 'if_exist|valid_date', 'created_at' => 'if_exist|valid_date', ]; @@ -32,7 +32,7 @@ class LoggerModel extends CommonModel { $entity = new LoggerEntity($datas); $entity->user_uid = session()->get('uid'); - return parent::modify_process($entity); + return parent::create_process($entity); } public function modify(LoggerEntity $entity, array $datas): LoggerEntity { diff --git a/app/Models/Trait/CommonTrait.php b/app/Models/Trait/CommonTrait.php deleted file mode 100644 index 1e6e962..0000000 --- a/app/Models/Trait/CommonTrait.php +++ /dev/null @@ -1,7 +0,0 @@ - 'if_exist|numeric', - 'id' => 'if_exist|min_length[4]|max_length[20]', - 'passwd' => 'if_exist|trim|min_length[4]|max_length[150]', - 'confirmpassword' => 'if_exist|trim|matches[passwd]', - 'name' => 'if_exist|min_length[2]|max_length[20]', - 'email' => 'if_exist|valid_email', - 'role' => 'if_exist|in_list[user,manager,cloudflare,director,master]', - 'status' => 'if_exist|in_list[use,unuse,standby]', + 'uid' => 'if_exist|regex_match[/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/]', + 'id' => 'required|min_length[4]|max_length[20]', + 'passwd' => 'required|trim|min_length[4]|max_length[150]', + 'name' => 'required|min_length[2]|max_length[20]', + 'email' => 'required|valid_email', + 'role' => 'required|string', + 'status' => 'if_exist|string', 'updated_at' => 'if_exist|valid_date', 'created_at' => 'if_exist|valid_date', ]; @@ -27,13 +26,14 @@ class UserModel extends CommonModel { return $this->asObject(UserEntity::class)->where($field, $value)->first(); } - public function getEntity(int $uid): ?UserEntity + public function getEntity(string $uid): ?UserEntity { return $this->getEntityByField($this->primaryKey, $uid); } public function create(array $datas): UserEntity { $entity = new UserEntity(); + $entity->uid = $this->getUUIDv5_CommonTrait(UUIDS['NAMESPACE'], UUIDS['SECRET']); foreach ($datas as $field => $value) { $entity->$field = $field === 'passwd' ? $entity->getEncryptedPassword($value) : $value; } diff --git a/app/Models/UserSNSModel.php b/app/Models/UserSNSModel.php index 84eecc9..de577b0 100644 --- a/app/Models/UserSNSModel.php +++ b/app/Models/UserSNSModel.php @@ -6,17 +6,17 @@ use App\Entities\UserSNSEntity; class UserSNSModel extends CommonModel { - protected $table = 'user_sns'; + protected $table = 'tw_user_sns'; // protected $primaryKey = 'uid'; protected $useAutoIncrement = false; protected $allowedFields = ['uid', 'user_uid', 'site', 'name', 'email', 'status', 'updated_at', 'created_at']; protected $validationRules = [ - 'uid' => 'if_exist|min_length[4]|max_length[250]', - 'user_uid' => 'if_exist|numeric', - 'site' => 'if_exist|min_length[4]', - 'name' => 'if_exist|min_length[2]|max_length[20]', - 'email' => 'if_exist|valid_email', - 'status' => 'if_exist|in_list[use,unuse,standby]', + 'uid' => 'required|string', + 'user_uid' => 'required|required', + 'site' => 'required|string', + 'name' => 'required|string', + 'email' => 'required|valid_email', + 'status' => 'if_exist|string', 'updated_at' => 'if_exist|valid_date', 'created_at' => 'if_exist|valid_date', ]; diff --git a/app/Trait/CommonTrait.php b/app/Trait/CommonTrait.php new file mode 100644 index 0000000..7b3d797 --- /dev/null +++ b/app/Trait/CommonTrait.php @@ -0,0 +1,35 @@ +계정관리