具有用户权限的Php管理员面板

时间:2012-08-10 23:22:27

标签: php

这是我的第一个问题,我相信这个问题已经不存在了:)我搜索但没有成功。

好的,我有下一个问题。 我需要知道如何在管理面板中执行用户权限。 我想要一个超级管理员,管理员和运营商。 这个人的任何人都有不同的特权。 超级管理员wiil拥有所有权限,管理员和运营商一些但不是所有权限都具有相同的权限。 我需要一个后端逻辑。 没有很多if语句怎么做,所以我的代码看起来不错? 我使用Smarty模板引擎和我自己编写的oop php。 我将分配Smarty特权,但下一步是什么? 任何人都可以给我一些想法或一些示例代码?

谢谢!

3 个答案:

答案 0 :(得分:3)

使用MVC这是一项相对简单的任务。在名为permissions的表中创建不同的角色,然后在另一个名为user_permissions的表中创建,将user_id连接到permission_id。然后在名为user的名为has_role()的类中创建一个函数。该函数接受两个参数:权限别名,最终是用户ID。

如果要避免在视图中调用函数,可以在控制器中保存传递给视图的不同变量,例如:

$isAdmin = $user->has_role('admin');
$isOperator = $user->has_role('operator');

如果您只向管理员显示某些内容,则可以在视图中执行以下操作:

<?php if($isAdmin): ?>

<p>Admin only content</p>

<?php endif; ?>

但是,如果您只有管理员页面,只需添加

即可
if(! $this->user->has_role('role')) {
  header("Location: /index.php");
  die();
}

会做到这一点。所有这一切当然都可以在没有MVC部分的情况下实现,但它变得更加清晰。

答案 1 :(得分:1)

也许您可以通过拆分管理员视图(可能是每种类型的用户获得不同的UI体验),然后根据用户的权限包含正确的文件来实现这一目标?

Tbh,如果不了解OOP框架的工作方式,这很难回答,因为这将定义您如何解决问题。

答案 2 :(得分:0)

class Session {

    public static function init() {
        @session_start();
    }

    public static function set($key, $value) {
        $_SESSION[$key] = $value;
    }

    public static function get($key) {
        if (isset($_SESSION[$key])) {
        return $_SESSION[$key];
        }
    }

    public static function destroy() {
        //unset($_SESSION);
        session_destroy();
    }

}

稍后你在你的登录php中设置角色,你从mysql获得$ data ['role']:

   Session::init();
   Session::set('role', $data['role']);

并检查角色使用,例如:

    $role = Session::get('role');
    if ($role != 'owner') {
        Session::destroy();
        header('location: '.URL.'login');
        exit;
    }