0

我想isPermitted()在我的自定义工作流函数中使用方法,但它似乎没有按预期工作,即使我的用户无权访问的记录,我的日志也会发回 true。

如果我在方法中输入 log,isPermitted() (vtigercrm/include/utils/UserInfoUtil.php)则 current_user 为 1,而我与另一个用户 (207) 一起登录。

但是,如果isPermitted方法是调用,例如,在类Vtiger_Save_Actions中,当前用户是正确的。

你能告诉我为什么如果我isPermitted在我的自定义函数中调用当前用户是 1 并且当前用户isPermitted调用的Vtiger_Save_Actions是正确的 (207) 吗?

我必须更换$current_user->id by $_SESSION["authenticated_user_id"]吗?在这种情况下没关系

我的自定义工作流功能如下:

function getExpenseType(){
    global $adb,$log, $current_user;

    $log->debug("ALTAIR getExpenseType OK");

    $sql = $adb->pquery( "SELECT expensetypeid 
    FROM vtiger_expensetype
    INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_expensetype.expensetypeid 
    WHERE vtiger_crmentity.deleted = 0" );

    $rows = $adb->num_rows($sql);

    for ( $i = 0; $i < $rows; $i++ ) {
        $recordId = $adb->query_result($sql, $i, 'expensetypeid');
        $moduleName = getSalesEntityType($recordId);

        if ( Users_Privileges_Model::isPermitted($moduleName, 'DetailView', $recordId) ) {
            $value[] = $recordId;
        }
    }

    $record = implode(',',$value);
    $log->debug("LOG: ExpenseType: ".json_encode($record));
}

如果我在 isPermitted() 方法中添加日志跟踪,则 current_user 为 1 而 207(当前登录的用户):

function isPermitted($module,$actionname,$record_id='')
{
    global $log;
    $log->debug("Entering isPermitted(".$module.",".$actionname.",".$record_id.") method ...");

    global $adb;
    global $current_user;
    global $seclog;
    require('user_privileges/user_privileges_'.$current_user->id.'.php');
    require('user_privileges/sharing_privileges_'.$current_user->id.'.php');

    $log->debug("LOG: Current user: ".$current_user->id);

    $permission = "no";
    if(($module == 'Users' || $module == 'Home' || $module == 'uploads') && $_REQUEST['parenttab'] != 'Settings')
    {
        //These modules dont have security right now
        $permission = "yes";
        $log->debug("Exiting isPermitted method ...");
        return $permission;

    }

热雷米

4

0 回答 0