目前,Auth 组件已用于锁定未登录的任何人对应用程序的访问。但是 users_controller 的添加操作已通过路由提供,以便他们可以“注册”。(重点是任何人都可以注册以访问应用程序的功能,但我需要实现一个唯一的管理员用户)
Router::connect('/register', array('controller' => 'users', 'action' => 'add'));
因此,在views/pages/home.ctp 上放置了一个“注册”链接以及一个登录表单:
<p>
Only takes about 1 minute to <?php echo $html->link('register', '/register'); ?> and its free.
</p>
<div id="login">
<h2>Login</h2>
<?php
if ($session->check('Message.auth')) $session->flash('auth');
echo $form->create('User', array('action' => 'login'));
echo $form->input('username', array('value' => 'billy'));
echo $form->input('password', array('value' => 'billy'));
echo $form->end('Login');
?>
</div>
视图/元素/header.ctp:
<?php if($html->loggedIn()): ?>
<ul class="right">
<li><?php echo $html->link('Log Out', '/users/logout'); ?></li>
</ul>
</div>
<?php endif; ?>
<!-- end nav -->
我的大问题是我需要找到一种简单的方法,最好没有 ACL 将 users_controller 的编辑操作和删除操作分开,这样只有管理员才能编辑和删除用户。
我的 users 表的数据库结构需要一个唯一的用户名(VARCHAR)和一个唯一的 ID(INT)
有没有什么简单的方法可以让我在登录表单上进行检查,如果输入的用户名字符串是“admin”或者“id”的值是否等于 1,那么只允许这个唯一的“admin”用户访问用户控制器的编辑和删除操作?我想可能会涉及到一些路由。
还是在核心中激活 cake_admin 用户是一个可行的选择?
我可以根据要求提供更多我的代码。请记住我正在使用 1.2 版
users_controller.php:
function edit($id = null)
{
if(!$this->Session->read('Auth.User.admin') == 1) {
// Not an admin user, go back where we came from
$this->redirect($this->referer());
}
$this->idEmpty($id, 'index');
if (!empty($this->data))
{
if ($this->User->save($this->data))
{
$this->flashSuccess('The User has been saved', 'index');
}
else
{
$this->flashWarning('The User could not be saved. Please, try again.');
}
}
if (empty($this->data))
{
$this->data = $this->User->read(null, $id);
}
}
function delete($id = null)
{
if(!$this->Session->read('Auth.User.admin') == 1) {
// Not an admin user, go back where we came from
$this->redirect($this->referer());
}
$this->idEmpty($id, 'index');
if ($this->User->del($id))
{
$this->flashSuccess('User Deleted', 'index');
}
}