photon / auth-mongodb
MongoDB 的身份验证和用户
v3.0
2020-03-06 08:56 UTC
Requires
- php: ^5.5 || ^7.0
- photon/photon: ^2.0
- photon/storage-mongodb-object: ^2.0 || ^3.0
Requires (Dev)
- phpunit/phpunit: ^5.0
- squizlabs/php_codesniffer: ^3.2
README
photon 的用户、组和 acl 存储的 MongoDB 后端
快速开始
-
将模块添加到您的项目中
composer require "photon/auth-mongodb:dev-master"
或指定版本
composer require "photon/auth-mongodb:^2.0"
- 在您的项目配置中定义 MongoDB 连接
声明您的 MongoDB 数据库
'databases' => array(
'default' => array(
'engine' => '\photon\db\MongoDB',
'server' => 'mongodb://:27017/',
'database' => 'orm',
'options' => array(
'connect' => true,
),
),
),
- 启用会话后端
身份验证模块使用会话来存储用户信息
'session_storage' => '\photon\session\storage\MongoDB',
'session_cookie_path' => '/',
'session_timeout' => 4 * 60 * 60,
'session_mongodb' => array(
'database' => 'default',
'collection' => 'session',
),
- 配置身份验证后端
配置身份验证后端以使用此模块
'auth_backend' => '\photon\Auth\MongoDBBackend',
- 创建用户
创建第一个用户以便登录
$user = new \photon\auth\MongoDBUser;
$user->setLogin('jd@exemple.com');
$user->setPassword('strong');
$user->save();
- 创建登录视图
在您的应用程序中添加登录视图,以下代码是最小的
class MyViews {
public function login($request, $match)
{
if ($request->method === 'POST') {
$user = \photon\auth\Auth::authenticate($request->POST);
if ($user !== false) {
\photon\auth\Auth::login($request, $user);
return new Redirect('/');
}
}
return shortcuts\Template::RenderToResponse('login.html', array(), $request);
}
}
在您的 urls 中声明登录视图。
array('regex' => '#^/login$#',
'view' => array('\Dummy', 'dummy'),
'name' => 'login_view')
- 享受 !
高级使用
自定义用户类
如果您想在用户类中添加特定于应用程序的内容,只需扩展它即可。这允许您更改存储对象集合的名称。
class MyUser extends \photon\auth\MongoDBUser
{
const collectionName = 'foobarcollection';
public function isAdmin()
{
return $this->admin;
}
}
然后,您必须配置 MongoDB 身份验证后端以使用您的类。编辑您的 photon 配置文件以添加
'auth_mongodb' => array(
'user_class' => '\My\App\MyUser',
)
使用 ACL 保护视图
以下 dummy 视图受前提条件的保护。类 MongoDBPrecondition 将加载名为 adminPanel 的 ACL 并确保用户可以访问此视图,否则将生成 403。
class Dummy
{
public $dummy_precond = array(
'\photon\auth\MongoDBPrecondition::adminPanel'
);
public function dummy($request, $match)
{
return new \photon\http\response\NoContent;
}
}
ACL 可以使用以下代码创建
$acl = new \photon\auth\MongoDBAcl;
$acl->setName('adminPanel');
$acl->addUser($user);
$acl->save();
您可以使用以下代码确保创建所有 ACL,用户可以稍后添加。
\photon\auth\MongoDBAcl::ensureExists(['admin', 'api', 'ntp']);
模板中的条件渲染
您可以在模板中使用 MongoDBTemplateTag 来测试用户 ACL。
{acl 'adminPanel'}
Will be display only if the user have the adminPanel acl
{/acl}
模板必须在您的配置文件中声明
'template_tags' => array(
'acl' => '\photon\auth\MongoDBTemplateTag',
)