Yazılımda izin yönetimi

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.

Join the ConversationLeave a reply

Your email address will not be published. Required fields are marked *

Comment*

Name*

Website

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.