[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Разграничение прав пользователей
Санчо
блин чето мне пришла идея в голову про разграниченией прав пользователей.
низнаю как только покатит не покатит.
1)короче,берем название каждого модуля ну тоесть php-файла и заносим в отдельную таблицу и называем ее модули.
2)во второй таблице, назваем ее права, сделаем следующие поля (id, FK_МОДУЛЬ(внешний ключи модуля), FK_читает_роль, FK_модифицирует_роль, FK_вставляет_роль, FK_удаляет_роль)
Смысл в том что на каждый модуль просто вешаются права т.е какая роль пользователя может читать этот модуль, какая модифицировать, ну и т.д

что думамаете по этому поводу?и возможно ли будет три внешних ключа на одну таблицу??(сам понимаю что это бред,но всетаки!)



Спустя 19 минут, 20 секунд (22.03.2010 - 00:57) krasilich написал(а):
Вообще, если интересно, как красиво сделать разделение прав пользователей, советую поковырять модуль Zend_ACL.

Что касается Вашей идеи, немного не понял сути. Зачем внешние ключи? и что с точки зрения разделения прав означают эти странные словосочетания после FK_?

Спустя 28 минут, 32 секунды (22.03.2010 - 01:26) Санчо написал(а):
2krasilich
FK - foreign key (внешний ключ), то есть я хочу использовать СУБД для этого.

я думаю сам написать поэтому не использую модули:)

Одна запись из таблицы ПРАВА будет означать что:ДАННЫЕ некоторого определенный модуль FK_МОДУЛЬ могут читать записи пользователи обладающие FK_читает_роль, могут добавлять записи обладающие ролью FK_вставляет_роль, могут редактировать записи обладающие ролью FK_модифицирует_роль, могут удалять записи обладающие ролью FK_удаляет_роль


конечно есть есть еще таблицы пользователи и роли , т. е получается всего 4 таблицы чтобы все это организовать.
в этом собственно говоря и есть вся идея.

Спустя 15 минут, 34 секунды (22.03.2010 - 01:41) kirik написал(а):
Почитай тут.
Делал проект с системой прав основаной на БД (две таблицы группы, права). Сейчас решил отказаться от БД ибо смысла в ней мало - права изменяются очень редко (точнее один раз - при запуске проекта), потом добавляются только группы. Поэтому права и группы описаны в массивах, и хитро генерятся классом:
сам класс
/**
* Simple ACL
*/

class _acl {
private static $rights = array(), $groups = array(), $perms = array(), $isAdmin = false;

public static function load($gid) {
$cfg = require(DIR_SRV_SYS . '/cfg/acl.php');

self::$isAdmin = ($gid === 1);
self::$rights = $cfg['rights'];
self::$groups = $cfg['groups'];

self::setGroup($gid); // select group
}

public static function isAllow($perm) {
return isset(self::$perms[$perm]) ? (self::$perms[$perm] === 1) : false;
}

public static function isAdmin($perm) {
return self::$isAdmin;
}

private static function setGroup($gid) {
$group = self::$groups[$gid];
if(is_array($group['permissions'])) {
$permissions = isset($group['inherit']) ? self::inheritPerms($group['permissions'], $group['inherit']) : $group['permissions'];
// generate ACL
for($i = 0, $c = count(self::$rights); $i < $c; $i++) {
self::$perms[self::$rights[$i]] = in_array(self::$rights[$i], $permissions) ? 1 : 0;
}
}
else {
// generate ACL
for($i = 0, $c = count(self::$rights); $i < $c; $i++) {
self::$perms[self::$rights[$i]] = $group['permissions'];
}
}
}


private static function inheritPerms($perms, $gid) {
if(isset(self::$groups[$gid]['inherit'])) {
return array_merge($perms, self::inheritPerms(self::$groups[$gid]['permissions'], self::$groups[$gid]['inherit']));
} else {
return array_merge($perms, self::$groups[$gid]['permissions']);
}
}
}


файл с правами/группами (/cfg/acl.php)
return array(
// default rights
'rights' => array(
'comments_add',
'comments_edit_all',
'comments_edit_own',
// ....
),
// groups
'groups' => array(
0 => array(
'name' => 'guest',
'permissions' => 0 // disallow all
),
1 => array(
'name' => 'admin',
'permissions' => 1 // allow all
),
2 => array(
'name' => 'global_moderator',
'permissions' => 1 // allow all
),
3 => array(
'name' => 'member',
'permissions' => array(
'comments_add',
'comments_edit_own',
'comments_remove_own',
// ....
)
),

// ...
)
);


использование
_acl::load($gid); // загружаем права доступа для группы $gid
_acl::isAllow($perm); // проверяем действие, где $perm - название действия

можно так же наследовать права от другой группы, прописав в массиве 'groups' 'inherit' => 3, для нужной группы, где 3 - наследуемая группа.
Как-то так smile.gif

Спустя 17 минут, 6 секунд (22.03.2010 - 01:58) Санчо написал(а):
2kirik
оке,спасибо за ифну smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.