Yazılım projeleriniz için hazır bir izin yönetimi örneği. Gerekli olanlar permission ve role isimlerinde tablolar ve bu tabloların içeriği sınıflarda bulunan objelerle oluşturabilirsiniz.
Not: örnekte kullanılan pdo sınıfı için şu yazıyı inceleyebilirsiniz.
Role sınıfımızı oluşturalım öncelikle;
<?php require ('/pdoConnect/pdoConnect.php'); class roles { private $rolesId; private $name; private $page; private $description; private $createDate; private $isActive; private $isDelete; private $createUser; private $connect; /** * @return mixed */ public function getDescription() { return $this->description; } /** * @param mixed $description */ public function setDescription($description) { $this->description = $description; } /** * @return mixed */ public function getRolesId() { return $this->rolesId; } /** * @return mixed */ public function getisDelete() { return $this->isDelete; } /** * @return mixed */ public function getisActive() { return $this->isActive; } /** * @return mixed */ public function getCreateUser() { return $this->createUser; } /** * @return mixed */ public function getCreateDate() { return $this->createDate; } /** * @return mixed */ public function getName() { return $this->name; } /** * @return mixed */ public function getPage() { return $this->page; } /** * @param mixed $rolesId */ public function setRolesId($rolesId) { $this->rolesId = $rolesId; } /** * @param mixed $isDelete */ public function setIsDelete($isDelete) { $this->isDelete = $isDelete; } /** * @param mixed $isActive */ public function setIsActive($isActive) { $this->isActive = $isActive; } /** * @param mixed $createUser */ public function setCreateUser($createUser) { $this->createUser = $createUser; } /** * @param mixed $createDate */ public function setCreateDate($createDate) { $this->createDate = $createDate; } /** * @param mixed $name */ public function setName($name) { $this->name = $name; } /** * @param mixed $page */ public function setPage($page) { $this->page = $page; } public function __construct() { $this->connect = dbConn::getConnection(); } public function addRoles() { $addRolesSql = "INSERT INTO `roles` (`name`, `page`, `isActive`, `createUser`, `createDate`, `isDelete`, `description`) VALUES (:name,:page,:isActive,:createUser,:createDate,:isDelete,:description)"; $pdo = $this->connect->prepare($addRolesSql); /* $pdo->bindParam(':name', $this->getName(), PDO::PARAM_STR); * bindParam ile bindValue arasında ki fark bindParam kullanıldığında * aldığı parametre execute olmadan önce değiştirilse bu son değişikliği kabul eder. * bindValue ise o andaki veriyi kullanır objenin sonradan değişmesi bir şey ifade etmez. */ $pdo->bindValue(':name', $this->getName(), PDO::PARAM_STR); $pdo->bindValue(':page', $this->getPage(), PDO::PARAM_INT); $pdo->bindValue(':isActive', $this->getisActive(), PDO::PARAM_BOOL); $pdo->bindValue(':createUser', $this->getCreateUser(), PDO::PARAM_INT); $pdo->bindValue(':createDate', $this->getCreateDate(), PDO::PARAM_STR); $pdo->bindValue(':isDelete', $this->getisDelete(), PDO::PARAM_BOOL); $pdo->bindValue(':description', $this->getDescription(), PDO::PARAM_STR); try { // Olası bir hatada işlemi bu noktadan itibaren başa alalım $this->connect->beginTransaction(); $pdo->execute(); return 100; } catch (PDOException $errorInfo) { // kayıt oluşturulduysa bunu geri alıyoruz. $this->connect->rollBack(); return $errorInfo->getMessage(); } } public function updateRoles() { $updateRolesSql = "UPDATE `roles` SET `name`=:name,`page`=:page,`isDelete`=:isDelete ,`isActive`=:isActive, `description`=:description WHERE rolesId=:rolesId LIMIT 1"; $pdo = $this->connect->prepare($updateRolesSql); $pdo->bindValue(':name', $this->getName(), PDO::PARAM_STR); $pdo->bindValue(':page', $this->getPage(), PDO::PARAM_INT); $pdo->bindValue(':isActive', $this->getisActive(), PDO::PARAM_BOOL); $pdo->bindValue(':isDelete', $this->getisDelete(), PDO::PARAM_BOOL); $pdo->bindValue(':description', $this->getDescription(), PDO::PARAM_STR); try { // Olası bir hatada işlemi bu noktadan itibaren başa alalım $this->connect->beginTransaction(); $pdo->execute(); return 100; } catch (PDOException $errorInfo) { // kayıt oluşturulduysa bunu geri alıyoruz. $this->connect->rollBack(); return $errorInfo->getMessage(); } } public function getRoles() { $getRolesSql = 'SELECT * FROM `roles` WHERE isActive=:isActive and isDelete=:isDelete'; $pdo = $this->connect->prepare($getRolesSql); $pdo->bindParam(':isActive', $this->getisActive(), PDO::PARAM_BOOL); $pdo->bindParam(':isDelete', $this->getisDelete(), PDO::PARAM_BOOL); try { $pdo->execute(); $getRolesResult = $pdo->fetchAll(); $getRolesJsonResult = json_encode($getRolesResult); return $getRolesJsonResult; } catch (PDOException $errorInfo) { return $errorInfo->getMessage(); } } }
Gerekli açıklamaları incelediyseniz, şimdi Permission sınıfımızı oluşturabiliriz.
<?php require ('/pdoConnect/pdoConnect.php'); class permission { private $permissionId; private $userId; private $rolesId; private $createDate; private $isActive; private $isDelete; private $createUser; private $connect; /** * @return mixed */ public function getCreateDate() { return $this->createDate; } /** * @return mixed */ public function getCreateUser() { return $this->createUser; } /** * @return mixed */ public function getisActive() { return $this->isActive; } /** * @return mixed */ public function getisDelete() { return $this->isDelete; } /** * @return mixed */ public function getPermissionId() { return $this->permissionId; } /** * @return mixed */ public function getRolesId() { return $this->rolesId; } /** * @return mixed */ public function getUserId() { return $this->userId; } /** * @param mixed $createDate */ public function setCreateDate($createDate) { $this->createDate = $createDate; } /** * @param mixed $createUser */ public function setCreateUser($createUser) { $this->createUser = $createUser; } /** * @param mixed $isActive */ public function setIsActive($isActive) { $this->isActive = $isActive; } /** * @param mixed $isDelete */ public function setIsDelete($isDelete) { $this->isDelete = $isDelete; } /** * @param mixed $permissionId */ public function setPermissionId($permissionId) { $this->permissionId = $permissionId; } /** * @param mixed $rolesId */ public function setRolesId($rolesId) { $this->rolesId = $rolesId; } /** * @param mixed $userId */ public function setUserId($userId) { $this->userId = $userId; } public function __construct() { $this->connect = dbConn::getConnection(); } public function getPermission() { $pdo = $this->connect->prepare('SELECT rolesId from permission WHERE userId=:userId and isActive=:isActive and isDelete=:isDelete'); $pdo->bindValue(':userId', $this->getUserId(), PDO::PARAM_INT); $pdo->bindValue(':isActive', $this->getisActive(), PDO::PARAM_BOOL); $pdo->bindValue(':isDelete', $this->getisDelete(), PDO::PARAM_BOOL); try { $pdo->execute(); while ($row = $pdo->fetch()) { $permissinList[] = $row["rolesId"]; } } catch (PDOException $errorInfo) { return $errorInfo->getMessage(); } return $permissinList; } public function addPermission() { $addPermissionSql = "INSERT INTO `permission` (`rolesId`, `userId`, `isActive`, `createUser`, `createDate`, `isDelete`) VALUES (:rolesId,:userId,:isActive,:createUser,:createDate,:isDelete)"; $pdo = $this->connect->prepare($addPermissionSql); $pdo->bindValue(':rolesId', $this->getRolesId(), PDO::PARAM_INT); $pdo->bindValue(':userId', $this->getUserId(), PDO::PARAM_INT); $pdo->bindValue(':isActive', $this->getisActive(), PDO::PARAM_INT); $pdo->bindValue(':createUser', $this->getCreateUser(), PDO::PARAM_INT); $pdo->bindValue(':createDate', $this->getCreateDate(), PDO::PARAM_STR); $pdo->bindValue(':isDelete', $this->getisDelete(), PDO::PARAM_INT); try { // Olası bir hatada işlemi bu noktadan itibaren başa alalım $this->connect->beginTransaction(); $pdo->execute(); return 100; } catch (PDOException $errorInfo) { // kayıt oluşturulduysa bunu geri alıyoruz. $this->connect->rollBack(); return $errorInfo->getMessage(); } } public function updatePermission() { $updatePermissionSql = "UPDATE `permission` SET `isDelete`=:isDelete ,`isActive`=:isActive WHERE `permissionId` = :permissionId LIMIT 1"; $pdo = $this->connect->prepare($updatePermissionSql); $pdo->bindValue(':isActive', $this->getisActive(), PDO::PARAM_INT); $pdo->bindValue(':isDelete', $this->getisDelete(), PDO::PARAM_INT); try { // Olası bir hatada işleminde bu noktadan itibaren geri alınsın. $this->connect->beginTransaction(); $pdo->execute(); return 100; } catch (PDOException $errorInfo) { // güncelleme gerçekleştiyse bunu işlemi geri alıyoruz. $this->connect->rollBack(); return $errorInfo->getMessage(); } } }
Yeni bir role ekleme örneği yapalım.
<?php include('roles.php'); $roles = new roles(); $name="userDelete"; $description ="Can this person user delete ?"; /* veritabanımızda pages diye bir tablo oluşturup projemizde ki sayfaları buradan yönetebiliriz. Bu şekilde kullanmak istemiyorsanız, roles sınıfımızda kullandığımız page alanını integer'dan string ifadeye değiştirmeyi unutmayınız. */ $page=20; //20 user sayfamız olsun. bu eylemi hangi sayfada gerçekleştirecek diye düşünebiliriz. $createUser = 1; // Bu kayıtı oluşturan yetkilinin id numarası. $nowTime = Date('Y-m-d H:i:s'); $roles->setName($name); $roles->setIsActive(1); $roles->setIsDelete(0); $roles->setDescription($description); $roles->setPage($page); $roles->setCreateUser($createUser); $roles->setCreateDate($nowTime); $addRole = $roles->addRoles(); if($addRole==100){ echo 'successfully'; }else { echo $addRole; } ?>
Rolümüzü ekledik şimdi de bu rolü bir kullanıcıya atayalım.
$roleId = 231; //kullanıcıya atayacağımız rolün id numarası. $userId = 1907; //rolün atanacağı kullanıcının id numarası. $permission->setRolesId($roleId); $permission->setIsActive(1); $permission->setIsDelete(0); $permission->setUserId($userId); $permission->setCreateUser($createUser); $permission->setCreateDate($nowTime); $addPermission = $permission->addPermission(); if($addPermission==100){ echo 'successfully'; }else { echo $addPermission; }
Son olarakta bu izinleri nasıl kontrol edeceğimize bakalım. Öncelikle kontrolü sağlayacak ve sürekli ulaşabileceğimiz bir fonksiyon yazalım.
function checkPermission($roleId, $userId){ /* Her seferinde veritabanına gidip kontrol etmesini engellemek için, üye login alanında izinleri bir session arrayinde tutabilirsiniz. Böylelikle fonksiyona sadece $roleId objesini tanımlayıp $permission->getPermission() yerine oluşturduğumuz session array objesini yerleştirebilirsiniz. Aşağıda her seferinde veritabanına giden örneği bulunmakta. */ $permission->setUserId($userId); $permission->setIsActive(1); $permission->setIsDelete(0); $permission->setRolesId($roleId); if (in_array($this->getRolesId(), $permission->getPermission())) { return true; } else { return false; } }
Fonksiyonumuzu da hazırladıktan sonra geriye bir tek kullanıcı bu izine sahip mi kontrol etmek kalıyor.
// örnek kullanım: if(checkPermission(231, 1907)){ echo 'so secret content.'; }else { echo 'gesi baglarinda dolaniyorum.'; }
mutluluk sizinle olsun.