<?php 
require_once __DIR__."/base.php"; 
class PHPRBACMainTest extends PHPRBAC_Test 
{ 
    function setUp() 
    { 
        parent::setUp (); 
    } 
    function testAssign() 
    { 
        $RID = jf::$RBAC->Roles->AddPath ( "/CEO/CIO/Admin" ); 
        jf::$RBAC->Permissions->AddPath ( "/Users/add" ); 
        jf::$RBAC->Permissions->AddPath ( "/Users/edit" ); 
        jf::$RBAC->Permissions->AddPath ( "/Users/remove" ); 
        $PID = jf::$RBAC->Permissions->AddPath ( "/Users/changepass" ); 
         
        $this->assertTrue ( jf::$RBAC->Assign ( $RID, $PID ) ); 
        $this->assertTrue ( jf::$RBAC->Assign ( $RID, "/Users/edit" ) ); 
        $this->assertTrue ( jf::$RBAC->Assign ( $RID, "add" ) ); 
        $this->assertTrue ( jf::$RBAC->Assign ( "/CEO/CIO", "/Users/remove" ) ); 
        $this->assertTrue ( jf::$RBAC->Assign ( "CEO", "Users" ) ); 
        $this->assertTrue ( jf::$RBAC->Assign ( "CEO", $PID ) ); 
        $this->assertTrue ( jf::$RBAC->Assign ( "/CEO/CIO", $PID ) ); 
        $this->assertTrue ( jf::$RBAC->Assign ( "/CEO", "/Users/add" ) ); 
        $this->assertTrue ( jf::$RBAC->Assign ( "/CEO/CIO/Admin", "remove" ) ); 
    } 
    function testCheck() 
    { 
         
        // adding roles 
        jf::$RBAC->Roles->AddPath ( "/CEO/CIO/Admin" ); 
        jf::$RBAC->Roles->AddPath ( "/CEO/CIO/Networking" ); 
        jf::$RBAC->Roles->AddPath ( "/CEO/CIO/CISO" ); 
        jf::$RBAC->Roles->AddPath ( "/CEO/Financial" ); 
        jf::$RBAC->Roles->AddPath ( "/CEO/Secretary" ); 
         
        // assingning roles to users 
        $res = jf::$RBAC->Users->Assign ( "/CEO", 2 ); 
        $res = $res and jf::$RBAC->Users->Assign ( "/CEO/Financial", 2 ); 
         
        $res = $res and jf::$RBAC->Users->Assign ( "/CEO/CIO/Admin", 3 ); 
        $res = $res and jf::$RBAC->Users->Assign ( "/CEO/CIO/Networking", 3 ); 
        $res = $res and jf::$RBAC->Users->Assign ( "/CEO/CIO/CISO", 3 ); 
         
        $res = $res and jf::$RBAC->Users->Assign ( "/CEO/Secretary", 4 ); 
        $this->assertTrue ( $res ); 
         
        // adding permissions 
        jf::$RBAC->Permissions->AddPath ( "/Users/add" ); 
        jf::$RBAC->Permissions->AddPath ( "/Users/edit" ); 
        jf::$RBAC->Permissions->AddPath ( "/Users/remove" ); 
        jf::$RBAC->Permissions->AddPath ( "/Users/changepass" ); 
        jf::$RBAC->Permissions->AddPath ( "/Signature/financial" ); 
        jf::$RBAC->Permissions->AddPath ( "/Signature/office" ); 
        jf::$RBAC->Permissions->AddPath ( "/Signature/order" ); 
        jf::$RBAC->Permissions->AddPath ( "/Signature/network" ); 
        jf::$RBAC->Permissions->AddPath ( "/reports/IT/network" ); 
        jf::$RBAC->Permissions->AddPath ( "/reports/IT/security" ); 
        jf::$RBAC->Permissions->AddPath ( "/reports/financial" ); 
        jf::$RBAC->Permissions->AddPath ( "/reports/general" ); 
         
        // assigning permissions to roles 
        $res = jf::$RBAC->Assign ( "CEO", "Users" ); 
        $res = $res and jf::$RBAC->Assign ( "CEO", "Signature" ); 
        $res = $res and jf::$RBAC->Assign ( "CEO", "/reports" ); 
        $this->assertTrue ( $res ); 
         
        $res = $res and jf::$RBAC->Assign ( "CIO", "/reports/IT" ); 
        $res = $res and jf::$RBAC->Assign ( "CIO", "/Users" ); 
         
        $res = $res and jf::$RBAC->Assign ( "Admin", "/Users" ); 
        $res = $res and jf::$RBAC->Assign ( "Admin", "/reports/IT" ); 
         
        $res = $res and jf::$RBAC->Assign ( "Networking", "/reports/network" ); 
        $res = $res and jf::$RBAC->Assign ( "Networking", "/Signature/network" ); 
         
        $res = $res and jf::$RBAC->Assign ( "CISO", "/reports/security" ); 
        $res = $res and jf::$RBAC->Assign ( "CISO", "/Users/changepass" ); 
        $this->assertTrue ( $res ); 
         
        $res = $res and jf::$RBAC->Assign ( "Financial", "/Signature/order" ); 
        $res = $res and jf::$RBAC->Assign ( "Financial", "/Signature/financial" ); 
        $res = $res and jf::$RBAC->Assign ( "Financial", "/reports/financial" ); 
         
        $res = $res and jf::$RBAC->Assign ( "Secretary", "/reports/financial" ); 
        $res = $res and jf::$RBAC->Assign ( "Secretary", "/Signature/office" ); 
        $this->assertTrue ( $res ); 
         
 
        // now checking 
         
        $this->assertTrue ( jf::$RBAC->Users->HasRole ( "/CEO/Financial", 2 ) ); 
        $this->assertTrue ( jf::$RBAC->Check ( "/Signature/financial", 2 ) ); 
        $this->assertTrue ( jf::$RBAC->Check ( "/reports/general", 2 ) ); 
        $this->assertTrue ( jf::$RBAC->Check ( "/reports/IT/security", 2 ) ); 
         
        $this->assertTrue ( jf::$RBAC->Check ( "/reports/IT/security", 3 ) ); 
        $this->assertTrue ( jf::$RBAC->Check ( "/reports/IT/network", 3 ) ); 
        $this->assertTrue ( jf::$RBAC->Check ( "/Users", 3 ) ); 
         
        $this->assertTrue ( jf::$RBAC->Check ( "/Signature/office", 4 ) ); 
        $this->assertFalse ( jf::$RBAC->Check ( "/Signature/order", 4 ) ); 
        $this->assertTrue ( jf::$RBAC->Check ( "/reports/financial", 4 ) ); 
        $this->assertFalse ( jf::$RBAC->Check ( "/reports/general", 4 ) ); 
         
         
        try 
        { 
            $this->assertFalse ( jf::$RBAC->Check ( "/reports/generalz", 4 ) ); 
            $this->fail ( "No error on unknown permission" ); 
        } catch ( RBACPermissionNotFoundException $e ) 
        { 
        } 
    } 
    function testEnforce() 
    { 
         
        try 
        { 
            $this->assertFalse ( jf::$RBAC->Check ( "/reports/generalz", "root" ) ); 
            $this->fail ( "No error on unknown permission" ); 
        } catch ( RBACPermissionNotFoundException $e ) 
        { 
        } 
    } 
}
 
 |