phwoolcon / admin
Admin module for 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-10-29 05:31:55 UTC
README
Admin module for Phwoolcon
Features
- Admin User and Roles model
- Admin Login Auth
- Admin ACL (route based)
- Admin operation log
ACL HOWTOs
How/Where to define ACL resources
The ACl component will scan admin/*
routes for corresponding controller methods as resources, and looking for @acl-name
annotation as display name.
To skip ACL check for a whole controller, please set property $skipAcl
as true
.
To skip ACL check for a method, please set add a key-value 'methodName' => true,
in property $skipAclMethod
.
How to apply ACL
ACL SHOULD be applied in the controller method initialze()
.
- Use
Phwoolcon\Admin\Auth::getUser()
to get logged in admin user; - Process
$skipAcl
and$skipAclMethod
. - Use
Acl::isAllowed($this->user, $controller, $action)
to check if the access is allowed to the user;
<?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 } }
How to refresh ACL resources
The ACL resources will be refreshed after the cache is cleared.
In most cases, you just need to run bin/dump-autoload
after you updated ACL definitions.