0

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

好的,我有下一个问题。我需要一些想法如何在管理面板中执行用户权限。我想要一个超级管理员、管理员和操作员。任何人都将拥有不同的特权。超级管理员将拥有所有权限,一些管理员和一些操作员(但并非所有人)将拥有相同的权限。我需要一个后端逻辑。如何在没有很多 if 语句的情况下做到这一点,这样我的代码看起来不错?我使用自己编写的 Smarty 模板引擎和 oop php。我将分配 Smarty 特权,但接下来呢?谁能给我想法或一些示例代码?

谢谢!

4

3 回答 3

3

使用 MVC 这是一项相对简单的任务。在一个名为的表中创建不同的角色,permissions然后在另一个名为的表中创建user_permissions连接user_idpermission_id. 然后创建一个函数,可能在一个名为usercalled的类中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 部分的情况下当然是可行的,但是它变得更加干净。

于 2012-08-10T23:34:12.840 回答
1

也许您可以通过拆分您的管理视图(大概每种类型的用户获得不同的 UI 体验)然后根据用户的权限包含正确的文件来做到这一点?

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

于 2012-08-10T23:28:10.760 回答
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 中设置角色,$data['role'] 您从 mysql 获得:

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

并检查角色使用,例如:

    $role = Session::get('role');
    if ($role != 'owner') {
        Session::destroy();
        header('location: '.URL.'login');
        exit;
    }
于 2012-08-10T23:51:36.343 回答