frobou / frobou-system-permission
Frobou系统权限
1.0.12
2018-08-13 20:18 UTC
Requires
- php: >=5.4.0
- frobou/frobou-db-connect: *
Requires (Dev)
README
使用权限验证系统。
如何工作:权限在需要的地方进行检查,如下例所示
$config = new FrobouDbConfig(json_decode(file_get_contents(__DIR__ . './../database.json')));
$connection = new FrobouDbConnection($config);
$perms = new FrobouSystemPermission($connection);
$user = $this->perms->login('test', 'pass', true);
$exp = $user->getPermission('admin');
var_dump($exp);
object(stdClass)#140 (4) {
["can_select"]=>
bool(true)
["can_insert"]=>
bool(false)
["can_update"]=>
bool(true)
["can_delete"]=>
bool(false)
}
if ($exp->can_select){
echo "I can";
}
想法是拥有分层权限,admin.teste表示用户在admin页面的teste资源上有权限X
我们使用frobou-db-connect包来连接数据库。在实例化FrobouSystemPermission时,所有必要的资源都变得可用。
- login($username, $password, $pass_in_plain = false)
- getUserList()
- getUserTypes()
- createUser(SystemUser $user)
- updateUser(SystemUser $user, array $where)
- deleteUser($username)
- undeleteUser($username)
- createGroup($name)
- getGroupList()
- createResource($name, $permission)
- registerGroupResource($username, $resourcename)
- unregisterGroupResource($username, $resourcename)
- registerUserResource($username, $resourcename)
- unregisterUserResource($username, $resourcename)
login方法接收到的SystemUser实例除了用户数据外还提供
- getPermission($resource, $separator = '.')
- getInsertString()
- getUpdateString(array $where)
- getSqlParams()
权限类型
- 分组权限。
- 用户权限。
- 统一权限
- 查看MERGE_PERMISSIONS
使用
一些常量可以用作系统配置的一种方式。
- MERGE_PERMISSIONS - 布尔型:true将使用户权限继承同名分组权限并合并,以提供结果的并集。
- BASE_PERMISSION - 布尔型:true表示如果存在基本权限,则返回分配给它们的值,否则权限为0
- PASSWORD_SALT - 字符串型:默认值为"default",如果提供值,则用于生成密码。 注意:使用salt生成的密码,如果PASSWORD_SALT的值被更改,则无法验证
- TRUE_DELETE - 布尔型:如果为true,则用户记录将被实际删除,否则仅禁用。 注意:没有处理表间关系删除的处理,这意味着在删除用户之前,必须删除所有关联的记录,创建一个FrobouDbSgdbErrorException异常
测试登录
public function testLoginOk()
{
$user = $this->perms->login('test', 'pass', true);
$this->assertInstanceOf(SystemUser::class, $user);
}
测试权限
public function testPermissionForResourceAdminDotTeste()
{
$user = $this->perms->login('test', 'pass', true);
$exp = new \stdClass();
$exp->can_select = true;
$exp->can_insert = true;
$exp->can_update = true;
$exp->can_delete = true;
$this->assertEquals($user->getPermission('admin.teste'), $exp);
}
创建一个分组
public function testInsertGroup()
{
$this->assertTrue($this->perms->createGroup('grp_' . rand(0, 15988)));
}
创建一个权限
public function testInsertResource()
{
$this->assertTrue($this->perms->createResource('admin.test', 0));
}
创建一个用户
public function testInsertUser()
{
$user = new SystemUser();
$user->setActive(1)->setCanEdit(1)->setCanLogin(1)->setCanUseApi(1)
->setCanUseWeb(1)->setCreateDate()->setEmail('capitao@caverna.com')->setName('Novo Usuario')
->setPassword('senhanha')->setSystemGroup(1)->setUsername('username_' . rand(0, 12345))->setUserType('T');
$this->assertTrue($this->perms->createUser($user));
}
绑定分组X权限
public function testRegisterGroupResource()
{
$this->perms->createResource('admin.com', 3);
$this->assertTrue($this->perms->registerGroupResource('user', 'admin.com'));
}
解除分组X权限
public function testUnRegisterGroupResource()
{
$this->perms->createResource('admin.com', 3);
$this->assertTrue($this->perms->unregisterGroupResource('user', 'admin.com'));
}
绑定用户X权限
public function testRegisterUserResource()
{
$this->perms->createResource('admin.com', 7);
$this->assertTrue($this->perms->registerUserResource('ispti', 'admin.com'));
}
解除用户X权限
public function testRegisterUserResource()
{
$this->perms->createResource('admin.com', 7);
$this->assertTrue($this->perms->unregisterUserResource('ispti', 'admin.com'));
}
测试删除用户(禁用)
public function testDeleteUser(){
$username = 'username_' . rand(0, 12345);
$user = new SystemUser();
$user->setActive(1)->setCanEdit(1)->setCanLogin(1)->setCanUseApi(1)
->setCanUseWeb(1)->setCreateDate()->setEmail('capitao@caverna.com')->setName('Novo Usuario')
->setPassword('senhanha')->setSystemGroup(1)->setUsername($username)->setUserType('T');
$this->perms->createUser($user);
$this->perms->createResource('admin.com', 3);
$this->perms->registerGroupResource($username, 'admin.com');
$this->perms->registerUserResource($username, 'admin.com');
$this->assertTrue($this->perms->deleteUser($username));
}
测试激活用户
public function testUndeleteUser(){
$username = 'fabio';
$user = new SystemUser();
$user->setActive(1)->setCanEdit(1)->setCanLogin(1)->setCanUseApi(1)
->setCanUseWeb(1)->setCreateDate()->setEmail('capitao@caverna.com')->setName('Novo Usuario')
->setPassword('senhanha')->setSystemGroup(1)->setUsername($username)->setUserType('T');
$this->perms->createUser($user);
$this->perms->deleteUser($username);
$this->assertTrue($this->perms->undeleteUser($username));
}
测试删除用户(真正删除)
public function testDeleteUserReal(){
define('TRUE_DELETE', true);
$username = 'username_' . rand(0, 12345);
$user = new SystemUser();
$user->setActive(1)->setCanEdit(1)->setCanLogin(1)->setCanUseApi(1)
->setCanUseWeb(1)->setCreateDate()->setEmail('capitao@caverna.com')->setName('Novo Usuario')
->setPassword('senhanha')->setSystemGroup(1)->setUsername($username)->setUserType('T');
$this->perms->createUser($user);
$this->assertTrue($this->perms->deleteUser($username));
}