Я пытаюсь написать свой собственный модуль RBAC на Kohana.
Я не хочу использовать существующий модуль, я просто хочу научиться этому.
Моими таблицами являются: пользователи, роли, разрешения и users_roles, role_permissions (из-за отношений «многие ко многим» между пользователями <-> ролями и ролями <-> разрешения);
Модель "Мой пользователь":
class Model_User extends ORM {
protected $_primary_key = 'user_id';
protected $_has_many = array(
'roles' => array(
'model' => 'role',
'through' => 'users_roles',
),
);
}
Моя ролевая модель:
class Model_Role extends ORM {
protected $_primary_key = 'role_id';
protected $_has_many = array(
'users' => array(
'model' => 'user',
'through' => 'users_roles',
),
'permissions' => array(
'model' => 'permission',
'through' => 'roles_permissions',
),
);
}
и модель моего разрешения:
class Model_Permission extends ORM {
protected $_primary_key = 'permission_id';
protected $_has_many = array(
'roles' => array(
'model' => 'role',
'through' => 'roles_permissions',
),
);
}
Я создаю пользователей:
$user = ORM::factory('user');
$user->username = 'johndoe';
$user->email = 'john@doe.com';
//etc
$user.save();
Я создаю роли:
$author = ORM::factory('role');
$author->name = 'author';
$author->save();
Я создаю разрешения:
$read = ORM::factory('permission');
$read->name = 'read';
$read->description = 'can read posts';
$read->save();
$write = ORM::factory('permission');
$write->name = 'write';
$write->description = 'can write posts';
$write->save();
Я добавляю роли пользователям:
$user->add('roles', $author);
Я добавляю разрешения для ролей:
$author->add('permissions', $read);
$author->add('permissions', $write);
и все работает нормально.
Но мой вопрос как проверить, есть ли у пользователя данное разрешение: в этом случае, как проверить, имеет ли johndoe разрешение на запись сообщения?
Спасибо за вашу помощь!