首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >具有用户权限的Php管理面板

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

Stack Overflow用户
提问于 2012-08-11 07:22:27
回答 3查看 6K关注 0票数 0

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

好了,我有下一个问题。我需要一些想法如何在管理面板中做一个用户的权限。我想有一个超级管理员,管理员和操作员。这里的任何人都会有不同的特权。超级管理员将拥有所有特权,管理员部分和操作员的一些但不是全部将拥有相同的特权。为此,我需要一个后端逻辑。如何在没有很多if语句的情况下做到这一点,让我的代码看起来很漂亮?我使用自己编写的Smarty模板引擎和oop php。我将使用Smarty权限进行赋值,但是下一步呢?有没有人能给我一些点子或示例代码?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-11 07:34:13

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

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

代码语言:javascript
代码运行次数:0
运行
复制
$isAdmin = $user->has_role('admin');
$isOperator = $user->has_role('operator');

如果你只向管理员显示一些内容,你可以在你的视图中这样做:

代码语言:javascript
代码运行次数:0
运行
复制
<?php if($isAdmin): ?>

<p>Admin only content</p>

<?php endif; ?>

但是,如果您有仅限管理的页面,只需将

代码语言:javascript
代码运行次数:0
运行
复制
if(! $this->user->has_role('role')) {
  header("Location: /index.php");
  die();
}

就能达到目的。当然,所有这一切都可以在没有MVC部分的情况下完成,但是有了它,它就变得更干净了。

票数 3
EN

Stack Overflow用户

发布于 2012-08-11 07:28:11

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

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

票数 1
EN

Stack Overflow用户

发布于 2012-08-11 07:51:36

代码语言:javascript
代码运行次数: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‘:

代码语言:javascript
代码运行次数:0
运行
复制
   Session::init();
   Session::set('role', $data['role']);

并检查角色的使用情况,例如:

代码语言:javascript
代码运行次数:0
运行
复制
    $role = Session::get('role');
    if ($role != 'owner') {
        Session::destroy();
        header('location: '.URL.'login');
        exit;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11910467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档