`
dcj3sjt126com
  • 浏览: 1868324 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

简单的用户授权系统,利用给user表添加一个字段标识管理员的方式

    博客分类:
  • YII
yii 
阅读更多

怎么创建一个简单的(非 RBAC)用户授权系统

通过查看论坛,我发现这是一个常见的问题,所以我决定写这篇文章。

本文只包括授权系统.假设你已经知道怎么创建身份验证系统(登录)。

数据库

首先在 user 表创建一个新的字段(integer 类型),字段名 'accessLevel',它定义了用户的访问权限

扩展 CWebUser 类

在配置文件(一般为 protected/config/main.php)中添加(或修改为)以下代码

'components'=>array(
  'user'=>array(
    //告诉应用程序使用自己的 WebUser 类,而不是默认的 CWebUser
    'class'=>'WebUser',
    //...
  ),
),

在组件文件夹(protected/components)中,创建 WebUser.php 文件,内容为

class WebUser extends CWebUser{
 private $_user;
 //是用户还是超级管理员?
 function getIsSuperAdmin(){
  return ( $this->user && $this->user->accessLevel === User::LEVEL_SUPERADMIN );
 }
 //该用户是否为管理员?
 function getIsAdmin(){
  return ( $this->user && $this->user->accessLevel >= User::LEVEL_ADMIN );
 }
 //获取登录用户
 function getUser(){
  if( $this->isGuest )
   return;
  if( $this->_user === null ){
   $this->_user = User::model()->findByPk( $this->id );
  }
  return $this->_user;
 }
}

用法

现在可以在 accessControl 过滤器(filter) 中来验证用户了

//在控制器中
function accessRules(){
  return array(
    //只有管理员可以访问
    array('allow',
      'expression'=>'$user->isAdmin',
       //变量 `user` 在访问规则(accessRule)表达式中表示的是 Yii::app()->user
    ),
    //deny all other users
    array('deny',
      'users'=>array('*').
    ),
  );
}

在视图中使用

if(Yii::app()->user->isAdmin){
   echo '欢迎,管理员!';
}
if(Yii::app()->user->isSuperAdmin){
   echo '你是超级管理员!';
}

数据表示

在用户名模型中(User Model),整型的那个字段的数据用以下方式表达

class User extends CActiveRecord{
 //define the number of levels that you need
 const LEVEL_REGISTERED=0, LEVEL_AUTHOR=1, LEVEL_ADMIN=6, LEVEL_SUPERADMIN=99;
 
 //define the label for each level
 static function getAccessLevelList( $level = null ){
  $levelList=array(
   self::LEVEL_REGISTERED => 'Registered',
   self::LEVEL_AUTHOR => 'Author',
   self::LEVEL_ADMIN => 'Administrator'
  );
  if( $level === null)
   return $levelList;
  return $levelList[ $level ];
 }
}
//using it in forms
$form->dropDownList($model,'accessLevel',$model->accessLevelList);
//using it in DetailView
$this->widget('zii.widgets.CDetailView',array(
  'data'=>$model,
  'attributes'=>array(
   //...,
   array(
    'name'=>'accessLevel',
    'value'=>$model->accessLevelList[$model->accessLevel],
   ),
  ),
));
//using it in GridView
$this->widget('zii.widgets.CGridView',array(
  'dataProvider'=>$model->search(),
  'columns'=>array(
   //...,
   array(
    'name'=>'accessLevel',
    'value'=>'$data->accessLevelList[$data->accessLevel]',
   ),
  ),
));
//display the administrator label 
echo User::getAccessLevelList( User::LEVEL_ADMIN );

以上就是所有内容,希望这对你有所帮助。

本文翻译自外文网站,查看原文请点击:http://www.yiiframework.com/wiki/191/implementing-a-user-level-access-system/
分享到:
评论
2 楼 dcj3sjt126com 2013-02-27  
srbac我看到有个项目里面实现了,现在研究研究他写的程序
1 楼 duchengbin 2013-02-27  
太帅

相关推荐

    oracle 查询表字段明细、字段注释、表注释

    Oracle 数据库管理系统提供了多种方式来查询表字段明细、字段注释、表注释等信息。本文将介绍如何使用 Oracle 的系统视图和系统表来查询表字段明细、字段注释、表注释等信息。 一、查询表字段明细 在 Oracle 中,...

    Mysql User表权限字段说明全介绍

    MySQL的User表是数据库管理系统中用于存储用户账户及其权限的核心组件。它定义了哪些用户可以访问MySQL服务器,以及他们能够执行的操作范围。本篇文章将深入探讨User表中的各个权限字段,帮助你全面理解如何控制和...

    添加管理员用户

    总结来说,批处理文件"添加管理员用户.bat"是一个用于Windows系统(如Win7和Win10)的实用工具,它简化了创建和赋予管理员权限的过程。通过学习和理解批处理文件的工作原理,我们可以更有效地管理我们的Windows系统...

    mantis添加管理员更改用户密码功能

    mantis添加管理员更改用户密码功能 ...为了解决这个问题,需要手动添加管理...这是一个非常重要的习惯,能够避免很多不必要的错误。 Mantis 系统的管理员更改用户密码的功能非常重要,它可以提高系统的安全性和可靠性。

    右键添加获得管理员权限

    标题所指的“右键添加获得管理员权限”是针对这个问题的一个解决方案。这个功能允许用户在点击文件或文件夹的右键菜单时,直接选择“获取管理员权限”,然后进行需要管理员权限的操作,而无需每次都通过“以管理员...

    Linux系统用户User和用户组Group的管理

    在Linux系统中,单用户多任务是指一个用户可以执行多个任务,而多用户多任务则是指多个用户可以同时使用同一个系统。在多用户多任务中,每个用户都可以完成不同的任务,而不同的用户也可以具有不同的权限。 用户在...

    SQLServer中如何将一个字段的多个记录值合在一行显示

    SQLServer 中将一个字段的多个记录值合并到一行显示的实现方法 SQL Server 是一种关系型数据库管理系统,具有强大的数据处理能力和存储能力。在实际应用中,我们经常需要将一个字段的多个记录值合并到一行显示,以...

    oracle创建表空间,创建用户,授权给新建的用户实例全解

    例如,我们创建一个名为`test_user`的用户,其默认表空间为`test_tablespace`,口令为`password`: ```sql CREATE USER test_user IDENTIFIED BY password DEFAULT TABLESPACE test_tablespace; ``` 三、授权给新建...

    mysql酒店管理系统数据表设计

    本文以一个简单的酒店预订系统为例,介绍了六张核心数据表的构建,包括管理员信息表、用户信息表、资源分组表、资源表、订单表和订单明细表。 首先,管理员信息表(adinfo)用于存储管理员的基本信息,包括登录名...

    oracle中将一个用户的所有表的权限授予另一个用户的方法

    本文将深入探讨如何在Oracle中将一个用户的所有表的权限授予另一个用户,这一过程通常在PL/SQL环境下通过执行特定的命令来完成。下面我们将详细解析这一操作的步骤、原理以及可能遇到的问题。 ### Oracle中的权限...

    根据字段名查到有该字段的所有表

    在数据库管理与开发过程中,经常会遇到需要...通过上述介绍,我们可以看到,利用SQL查询来查找包含特定字段的所有表是一个实用且高效的方法。无论是对于数据库管理员还是开发者来说,掌握这些技巧都是非常有价值的。

    oracle 添加用户 授权问题

    ### Oracle添加用户及授权问题详解 #### 一、Oracle用户管理概述 在Oracle数据库管理系统中,用户管理是一项非常重要的任务。正确地创建用户并授予适当的权限对于确保数据的安全性和完整性至关重要。本文将详细...

    右键添加 获取管理员权限

    "右键添加 获取管理员权限"是解决这一问题的一种方法,它通过一个注册表脚本(`.reg`文件)来实现。本文将详细讲解如何使用这种技巧以及相关的知识点。 首先,注册表(Registry)是Windows操作系统中的核心数据库,...

    Mysql root用户对应的host字段缺少localhost导致本地无法访问数据库问题修复

    Mysql 是一个关系数据库管理系统,广泛应用于各种 web 应用程序中。但是,在使用 Mysql 时,很容易遇到一些问题,例如 Mysql root 用户对应的 host 字段缺少 localhost 导致本地无法访问数据库问题。这种问题的产生...

    CMD命令添加管理员

    在Windows操作系统中,CMD(命令提示符)是一个强大的命令行工具,用于执行各种系统管理任务。"CMD命令添加管理员"是指通过CMD来管理用户账户,包括创建、修改和提升用户权限,尤其是提升到管理员级别的操作。这对于...

    User.tar.gz openEuler系统Shell编程批量添加用户和删除用户的脚本

    总结来说,利用openEuler系统的Shell脚本进行批量用户管理是一种常用且高效的方法。`add_user.sh`和`del_user.sh`两个脚本分别展示了如何通过Shell自动化处理用户添加和删除,它们的实现原理和使用场景对于Linux运维...

    javaweb简易新闻管理系统

    "javaweb简易新闻管理系统" 是一个基于Java Web技术实现的简单新闻管理应用程序。这个系统主要目的是为了方便用户发布、编辑、查询和管理新闻信息。它涵盖了Java Web开发中的核心概念和技术,包括Servlet、JSP、JDBC...

    Oracle查询指定表的所有字段名和数据类型SQL

    1. **数据迁移**:当需要将数据从一个数据库迁移到另一个数据库时,可以通过这种方式快速获取原数据库的表结构信息,以便在新数据库中创建相应的表结构。 2. **表结构分析**:开发人员在进行数据库设计或维护时,...

    MySQL管理密码用户授权实践

    例如,如果要给一个名为"John"的用户授予对名为"testDB"数据库中所有表的读写权限,可以使用以下命令: ```sql GRANT SELECT, INSERT, UPDATE, DELETE ON testDB.* TO John@'localhost' IDENTIFIED BY 'John的密码'...

    hibernate 进行多表查询每个表中各取几个字段

    例如,如果我们想查询`User`和`Address`表中用户ID和地址信息,可以写一个如下的HQL查询: ```java String hql = "SELECT u.id AS userId, a.info AS addressInfo FROM User u JOIN u.address a"; ``` 二、...

Global site tag (gtag.js) - Google Analytics