Функции для работы с правами доступа

В IRIS CRM можно задать отдельные права доступа на каждую запись таблицы. При этом права доступа на записи хранятся в отдельной служебной таблице. Например, для таблицы iris_account права доступа хранятся в таблице iris_account_access. Соответственно, изменение прав доступа для записей сводится к изменению содержимого служебных таблиц iris_xxx_access.

В данной статье описаны функции скрипта access.php, которые делают работу по изменению прав доступа более удобной.

Данный скрипт находится в конфигурации в папке /config/common/Lib/access.php.

Перечень функций

GetRecordPermissions()

Возвращает текущие права доступа для записи.

GetRecordPermissions($p_table_name, $p_record_id, &$p_permissions, $p_conn=0)

Параметры

$p_table_name — имя таблицы.

$p_record_id — id записи таблицы, для которой нужно получить права доступа.

$p_permissions — переменная, в которую будет помещены права доступа для записи таблицы $p_table с id $p_record_id. Права доступа хранятся в двумерном массиве. Каждый элемент массива представляет собой ассоциативный массив с ключами 'userid', 'roleid', 'r', 'w', 'd', 'a'.

$p_conn — необязательный параметр. Объект соединения с базой данных. Если параметр не указан, то функция сама заботится о соединении с БД.

Результат

Если функция завершилась успешно, то она вернет 0. Иначе вернет 1.

GetDefaultRecordPermissions()

Возвращает права доступа по умолчанию для записи. Для пользователя, создавшему запись, даются все права на созданную им запись.

GetDefaultRecordPermissions($p_table_name, $p_user_id, &$p_permissions, $p_conn=0)

Параметры

$p_table_name — имя таблицы.

$p_user_id — id пользователя. Права доступа вычисляются, как если бы данный пользователь создал запись в таблице $p_table_name. Права даются самому пользователю, а также, в зависимости от его группы права назначаются остальным группам пользователей в соответсвии с правами по умолчанию для таблицы $p_table_name.

$p_permissions — переменная, в которую будет помещены права доступа, которые были бы присвоены записи, если бы ее создал пользователь с id = $p_user_id. Права доступа хранятся в двумерном массиве. Каждый элемент массива представляет собой ассоциативный массив с ключами 'userid', 'roleid', 'r', 'w', 'd', 'a'.

$p_conn — необязательный параметр. Объект соединения с базой данных. Если параметр не указан, то функция сама заботится о соединении с БД.

Результат

Если функция завершилась успешно, то она вернет 0. Иначе вернет 1.

SetDefaultPermissions()

Устанавливает для записи права по умолчанию.

SetDefaultPermissions($p_table_name, $p_record_id, $p_user_id, $p_conn=0)

Параметры

$p_table_name — имя таблицы.

$p_record_id — id записи таблицы, для которой нужно задать права доступа.

$p_user_id — id пользователя. Права доступа вычисляются, как если бы данный пользователь создал запись в таблице $p_table_name. Права даются самому пользователю, а также, в зависимости от его группы права назначаются остальным группам пользователей в соответствии с правами по умолчанию для таблицы $p_table_name.

$p_conn — необязательный параметр. Объект соединения с базой данных. Если параметр не указан, то функция сама заботится о соединении с БД.

Результат

Если функция завершилась успешно, то она вернет 0. Иначе вернет 1.

ChangeRecordPermissions()

Изменяет существующие права доступа для записи (записей) в таблице $p_table_name, у которых id = $p_record_id. $p_record_id может быть массивом и содержать несколько значений id.

ChangeRecordPermissions($p_table_name, $p_record_id, &$p_permissions, $p_conn=0)

Параметры

$p_table_name — имя таблицы.

$p_record_id — id записи (записей), для которых нужно изменить права доступа. Если в $p_record_id указана строка, то для изменятся права одной записи, если в $p_record_id указан массив строк, то изменются права нескольких записей id которых являются элементами массива $p_record_id.

$p_permissions — массив, элементами которого являются ассоциативные массивы с ключами 'userid', 'roleid', 'r', 'w', 'd', 'a'. Ассоциативный массив должен содержать или 'userid' или 'roleid'. Ключи 'r', 'w', 'd', 'a' должны содержать значения 0 или 1. Изменение прав происходит только для тех пользователей или групп пользователей, которые указаны в $p_permissions. Чтобы заменить права доступа, следует вначале удалить существующие права при помощи функции DeleteAllRecordPermissions().

$p_conn — необязательный параметр. Объект соединения с базой данных. Если параметр не указан, то функция сама заботится о соединении с БД.

Результат

Если функция завершилась успешно, то она вернет 0. Иначе вернет 1.

DeleteAllRecordPermissions()

Удаляет все права доступа у записи.

DeleteAllRecordPermissions($p_table_name, $p_record_id, $p_conn=0)

Параметры

$p_table_name — имя таблицы.

$p_record_id — id записи, у которой нужно удалить все права доступа.

$p_conn — необязательный параметр. Объект соединения с базой данных. Если параметр не указан, то функция сама заботится о соединении с БД.

Результат

Если функция завершилась успешно, то она вернет 0. Иначе вернет 1.

Примеры

1. Считывание прав доступа.

<?php
include GetPath()."/config/common/Lib/access.php";
$con = db_connect(); // соединение с БД
 
$object_permissions = null;
GetRecordPermissions("iris_object", $p_rec_id, &$object_permissions, $con);

Результат:

$object_permissions = Array
(
    [0] => Array
        (
            [roleid] =>
            [userid] => 005405b7-8344-49f6-98a2-e1891cbff803
            [r] => 1
            [w] => 1
            [d] => 1
            [a] => 1
        )
    [1] => Array
        (
            [roleid] => 9df3ee85-81cd-43f5-8851-94ae8d477b51
            [userid] =>
            [r] => 1
            [w] => 0
            [d] => 0
            [a] => 0
        )
)

2. Установка прав доступа.

<?php
include GetPath()."/config/common/Lib/access.php";
$con = db_connect(); // соединение с БД
 
// дадим текущему пользователю доступ на чтение к данной записи
$permissions[] = array(‘userid’ => GetUserID(), ‘roleid’ => , ‘r’ => 1, ‘w’ => 0, ’d’ => 0, ‘a’ => 0);
$res = ChangeRecordPermissions(‘iris_object’, $p_rec_id, $permissions);
 
// считаем права доступа еще раз
$object_permissions = null;
GetRecordPermissions("iris_object", $p_rec_id, &$object_permissions, $con);

Результат:

$object_permissions = Array
(
    [0] => Array
        (
            [roleid] =>
            [userid] => 005405b7-8344-49f6-98a2-e1891cbff803
            [r] => 1
            [w] => 1
            [d] => 1
            [a] => 1
        )
    [1] => Array
        (
            [roleid] => 9df3ee85-81cd-43f5-8851-94ae8d477b51
            [userid] =>
            [r] => 1
            [w] => 0
            [d] => 0
            [a] => 0
        )
    [2] => Array
        (
            [roleid] =>
            [userid] => 39c9fe80-cbc4-4169-be95-910dbce22283
            [r] => 1
            [w] => 0
            [d] => 0
            [a] => 0
        )
)