В 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
)
)