phwoolcon / admin
Phwoolcon 的管理模块
dev-master / 1.0.x-dev
2017-11-01 14:29 UTC
Requires
- php: >=5.5.0
- phwoolcon/phwoolcon: ~1.0
This package is auto-updated.
Last update: 2024-08-29 05:06:06 UTC
README
Phwoolcon 的管理模块
功能
- 管理用户和角色模型
- 管理登录认证
- 管理 ACL(基于路由)
- 管理操作日志
ACL 如何操作
如何/在哪里定义 ACL 资源
ACL 组件将扫描 admin/*
路由以找到相应的控制器方法作为资源,并查找 @acl-name
注释作为显示名称。
要跳过整个控制器的 ACL 检查,请设置属性 $skipAcl
为 true
。
要跳过方法的 ACL 检查,请在属性 $skipAclMethod
中添加键值对 'methodName' => true,
。
如何应用 ACL
ACL 应该在控制器方法 initialize()
中应用。
- 使用
Phwoolcon\Admin\Auth::getUser()
获取登录的管理员用户; - 处理
$skipAcl
和$skipAclMethod
。 - 使用
Acl::isAllowed($this->user, $controller, $action)
检查用户是否允许访问;
<?php namespace My\App\Admin\Controllers; use Phwoolcon\Admin\Acl; use Phwoolcon\Admin\Auth; use Phwoolcon\Admin\Model\Admin as AdminModel; use Phwoolcon\Controller; use Phwoolcon\Controller\Admin; use Phwoolcon\Exception\HttpException; /** * @acl-name Manage Blogs */ class BlogController extends Controller { use Admin { Admin::initialize as _initialize; } protected $skipAcl = false; protected $skipAclMethod = [ 'thisIsAnOpenMethod' => true, ]; /** * @var AdminModel */ protected $user; public function initialize() { $this->_initialize(); $user = Auth::getUser(); if (!$user) { $this->session->set('admin_redirect_url', secureUrl($this->request->getURI())); throw new HttpException('Moved Temporarily', 302, ['Location' => secureUrl('/admin/auth')]); } $this->user = $user; $this->checkAcl(); } protected function checkAcl() { if ($this->skipAcl) { return; } $controller = $this->router->getControllerName(); $action = $this->router->getActionName(); if (!empty($this->skipAclMethod[$action])) { return; } if (Acl::isAllowed($this->user, $controller, $action)) { return; } throw new HttpException('Forbidden', 403); } /** * @acl-name List all blogs */ public function getList() { // blah blah blah } /** * @acl-name Access a blog */ public function getEdit() { // blah blah blah } /** * @acl-name Create a blog */ public function postCreate() { // blah blah blah } /** * @acl-name Update a blog */ public function postEdit() { // blah blah blah } /** * This method will be open to all admins */ public function thisIsAnOpenMethod() { // blah blah blah } }
如何刷新 ACL 资源
在清除缓存后,ACL 资源将刷新。
在大多数情况下,您只需要在更新 ACL 定义后运行 bin/dump-autoload
。