Could anyone shed any light as to why i can get this working. I want to query an array to see if the USER->id that is currently logged in is assigned a specific role.

$contextroles = get_records_sql("SELECT userid FROM {$CFG->prefix}role_assignments WHERE contextid = 23 AND roleid = 3");



    function object2array($object) {
        if (is_object($object)) {
            foreach ($object as $key => $value) {
                $array[$key] = $value;
            }
        }
        else {
            $array = $object;
        }
        return $array;
    }

    $alloweduser = object2array($contextroles);


    if (in_array($USER->id, $alloweduser)) {
    echo'Your in<br />';
    echo $USER->id.'<br />';
    print_r($alloweduser);
    }

    else{
    echo'<br />You do not have permission to acces this database.<br />';
    echo $USER->id.'<br />';
    print_r($alloweduser);
    exit;
    }

Im currently getting this output:

You do not have permission to acces this database.

5410

Array ( [7] => stdClass Object ( [userid] => 7 ) [9] => stdClass Object ( [userid] => 9 ) [27] => stdClass Object ( [userid] => 27 ) [98] => stdClass Object ( [userid] => 98 ) [203] => stdClass Object ( [userid] => 203 ) [252] => stdClass Object ( [userid] => 252 ) [5410] => stdClass Object ( [userid] => 5410 ) )

As you can see 5410 is in the array so should not get accessed denied. Thanks in advance for any help.

link|improve this question

71% accept rate
where is this variable/object $USER, $CFG come from? And what's wrong with object which you MUST convert it to array? – ajreal Sep 1 '11 at 13:40
8  
Your object2array() function is redundant. Casting an object to (array) has the same effect. – Rijk Sep 1 '11 at 13:40
You're not saying, what the get_records_sql() does. Maybe you can just modify it so that it returns an array? What is $USER->id? And additionally I'm not sure if you can do a foreach on an object. Also, "5410" is not in the array but rather another stdObject which holds the userid "5410". That's a difference. – Sebastian Wramba Sep 1 '11 at 13:43
feedback

1 Answer

up vote 1 down vote accepted

Because 5410 != stdClass Object ( [userid] => 5410 ) if you use in_array().

Since your array key looks like same with userid, you just use isset($alloweduser[$USER->id]) instead.

link|improve this answer
Bingo, thank you very much. – Codded Sep 1 '11 at 14:36
also removed function: Your object2array() function is redundant. Casting an object to (array) has the same effect. – Rijk van Wel 2 – Codded Sep 1 '11 at 16:02
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.