成都网站建设设计

将想法与焦点和您一起共享

php统一数据权限验证,php用户登录功能验证

在php网站中用户权限

4个表

专注于为中小企业提供网站设计、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业津南免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上1000+企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

用户表(用户信息表)

权限表(设置可以访问的页面)

角色表(如果申请用户的时候有多项选择的时候添加,没有则不需要)

用户权限对应关系表(这个表是用于给每个用户赋权)

如果用户访问页面的时候,判断是否存在访问权限(查用户权限对应关系表),如果有正常访问,如果没有页面跳转。不过跳到登录页面感觉不太合理,你判断用户是否有权限的时候,他应该是登录状态,如果再跳到登录页面感觉不合理。

判断是否存在访问权限可以封装成公共类,每个页面初始化的时候都调用这个公共类。可以通过用户ID进行判断。

同是普通用户,那就加标识,判断的时候再判断一下标识,然后根据标识进行页面跳转。

以上,希望能帮到你。

auth 权限验证求助

ThinkPHP权限认证Auth实例详解ThinkPHP权限认证Auth实例,本文以实例代码的形式深入剖析了ThinkPHP权限认证Auth的实现原理与方法,具体步骤如下:mysql数据库部分sql代码:?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172--------------------------------Tablestructureforthink_auth_group------------------------------DROPTABLEIFEXISTS`think_auth_group`;CREATETABLE`think_auth_group`(`id`mediumint(8)unsignedNOTNULLAUTO_INCREMENT,`title`char(100)NOTNULLDEFAULT'',`status`tinyint(1)NOTNULLDEFAULT'1',`rules`char(80)NOTNULLDEFAULT'',PRIMARYKEY(`id`))ENGINE=MyISAMAUTO_INCREMENT=2DEFAULTCHARSET=utf8COMMENT='用户组表';--------------------------------Recordsofthink_auth_group------------------------------INSERTINTO`think_auth_group`VALUES('1','管理组','1','1,2');--------------------------------Tablestructureforthink_auth_group_access------------------------------DROPTABLEIFEXISTS`think_auth_group_access`;CREATETABLE`think_auth_group_access`(`uid`mediumint(8)unsignedNOTNULLCOMMENT'用户id',`group_id`mediumint(8)unsignedNOTNULLCOMMENT'用户组id',UNIQUEKEY`uid_group_id`(`uid`,`group_id`),KEY`uid`(`uid`),KEY`group_id`(`group_id`))ENGINE=MyISAMDEFAULTCHARSET=utf8COMMENT='用户组明细表';--------------------------------Recordsofthink_auth_group_access------------------------------INSERTINTO`think_auth_group_access`VALUES('1','1');INSERTINTO`think_auth_group_access`VALUES('1','2');--------------------------------Tablestructureforthink_auth_rule------------------------------DROPTABLEIFEXISTS`think_auth_rule`;CREATETABLE`think_auth_rule`(`id`mediumint(8)unsignedNOTNULLAUTO_INCREMENT,`name`char(80)NOTNULLDEFAULT''COMMENT'规则唯一标识',`title`char(20)NOTNULLDEFAULT''COMMENT'规则中文名称',`status`tinyint(1)NOTNULLDEFAULT'1'COMMENT'状态:为1正常,为0禁用',`type`char(80)NOTNULL,`condition`char(100)NOTNULLDEFAULT''COMMENT'规则表达式,为空表示存在就验证,不为空表示按照条件验证',PRIMARYKEY(`id`),UNIQUEKEY`name`(`name`))ENGINE=MyISAMAUTO_INCREMENT=5DEFAULTCHARSET=utf8COMMENT='规则表';--------------------------------Recordsofthink_auth_rule------------------------------INSERTINTO`think_auth_rule`VALUES('1','Home/index','列表','1','Home','');INSERTINTO`think_auth_rule`VALUES('2','Home/add','添加','1','Home','');INSERTINTO`think_auth_rule`VALUES('3','Home/edit','编辑','1','Home','');INSERTINTO`think_auth_rule`VALUES('4','Home/delete','删除','1','Home','');DROPTABLEIFEXISTS`think_user`;CREATETABLE`think_user`(`id`int(11)NOTNULL,`username`varchar(30)DEFAULTNULL,`password`varchar(32)DEFAULTNULL,`age`tinyint(2)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;--------------------------------Recordsofthink_user------------------------------INSERTINTO`think_user`VALUES('1','admin','21232f297a57a5a743894a0e4a801fc3','25');配置文件Application\Common\Conf\config.php部分:?12345678910111213141516171819202122'配置值''DB_DSN'='',//数据库连接DSN用于PDO方式'DB_TYPE'='mysql',//数据库类型'DB_HOST'='localhost',//服务器地址'DB_NAME'='thinkphp',//数据库名'DB_USER'='root',//用户名'DB_PWD'='root',//密码'DB_PORT'=3306,//端口'DB_PREFIX'='think_',//数据库表前缀'AUTH_CONFIG'=array('AUTH_ON'=true,//认证开关'AUTH_TYPE'=1,//认证方式,1为时时认证;2为登录认证。'AUTH_GROUP'='think_auth_group',//用户组数据表名'AUTH_GROUP_ACCESS'='think_auth_group_access',//用户组明细表'AUTH_RULE'='think_auth_rule',//权限规则表'AUTH_USER'='think_user'//用户信息表));项目Home控制器部分Application\Home\Controller\IndexController.class.php代码:?123456789101112131415161718192021222324check($name,$uid,$type,$mode,$relation)){die('认证:成功');}else{die('认证:失败');}}}以上这些代码就是最基本的验证代码示例。下面是源码阅读:1、权限检验类初始化配置信息:?1$Auth=new\Think\Auth();创建一个对象时程序会合并配置信息程序会合并Application\Common\Conf\config.php中的AUTH_CONFIG数组?1234567891011publicfunction__construct(){$prefix=C('DB_PREFIX');$this-_config['AUTH_GROUP']=$prefix.$this-_config['AUTH_GROUP'];$this-_config['AUTH_RULE']=$prefix.$this-_config['AUTH_RULE'];$this-_config['AUTH_USER']=$prefix.$this-_config['AUTH_USER'];$this-_config['AUTH_GROUP_ACCESS']=$prefix.$this-_config['AUTH_GROUP_ACCESS'];if(C('AUTH_CONFIG')){//可设置配置项AUTH_CONFIG,此配置项为数组。$this-_config=array_merge($this-_config,C('AUTH_CONFIG'));}}2、检查权限:?1check($name,$uid,$type=1,$mode='url',$relation='or')大体分析一下这个方法首先判断是否关闭权限校验如果配置信息AUTH_ON=false则不会进行权限验证否则继续验证权限?123if(!$this-_config['AUTH_ON']){returntrue;}获取权限列表之后会详细介绍:?1$authList=$this-getAuthList($uid,$type);此次需要验证的规则列表转换成数组:?12345678if(is_string($name)){$name=strtolower($name);if(strpos($name,',')!==false){$name=explode(',',$name);}else{$name=array($name);}}所以$name参数是不区分大小写的,最终都会转换成小写开启url模式时全部转换为小写:?123if($mode=='url'){$REQUEST=unserialize(strtolower(serialize($_REQUEST)));}权限校验核心代码段之一,即循环所有该用户权限判断当前需要验证的权限是否在用户授权列表中:?12345678910111213foreach($authListas$auth){$query=preg_replace('/^.+\?/U','',$auth);//获取url参数if($mode=='url'$query!=$auth){parse_str($query,$param);//获取数组形式url参数$intersect=array_intersect_assoc($REQUEST,$param);$auth=preg_replace('/\?.*$/U','',$auth);//获取访问的url文件if(in_array($auth,$name)$intersect==$param){//如果节点相符且url参数满足$list[]=$auth;}}elseif(in_array($auth,$name)){$list[]=$auth;}}in_array($auth,$name)如果权限列表中其中一条权限等于当前需要校验的权限则加入到$list中注:?12345678910111213$list=array();//保存验证通过的规则名if($relation=='or'and!empty($list)){returntrue;}$diff=array_diff($name,$list);if($relation=='and'andempty($diff)){returntrue;}$relation=='or'and!empty($list);//当or时只要有一条是通过的则权限为真$relation=='and'andempty($diff);//当and时$name与$list完全相等时权限为真3、获取权限列表:?1$authList=$this-getAuthList($uid,$type);//获取用户需要验证的所有有效规则列表这个主要流程:获取用户组?12$groups=$this-getGroups($uid);//SELECT`rules`FROMthink_auth_group_accessaINNERJOINthink_auth_groupgona.group_id=g.idWHERE(a.uid='1'andg.status='1')简化操作就是:?1SELECT`rules`FROMthink_auth_groupWHERESTATUS='1'ANDid='1'//按正常流程去think_auth_group_access表中内联有点多余.!取得用户组rules规则字段这个字段中保存的是think_auth_rule规则表的id用,分割$ids就是$groups变量最终转换成的id数组:?12345$map=array('id'=array('in',$ids),'type'=$type,'status'=1,);取得think_auth_rule表中的规则信息,之后循环:?123456789101112131415foreach($rulesas$rule){if(!empty($rule['condition'])){//根据condition进行验证$user=$this-getUserInfo($uid);//获取用户信息,一维数组$command=preg_replace('/\{(\w*?)\}/','$user[\'\\1\']',$rule['condition']);//dump($command);//debug@(eval('$condition=('.$command.');'));if($condition){$authList[]=strtolower($rule['name']);}}else{//只要存在就记录$authList[]=strtolower($rule['name']);}}if(!empty($rule['condition'])){//根据condition进行验证这里就可以明白getUserInfo会去获取配置文件AUTH_USER对应表名去查找用户信息重点是:?12$command=preg_replace('/\{(\w*?)\}/','$user[\'\\1\']',$rule['condition']);@(eval('$condition=('.$command.');'));'/\{(\w*?)\}/可以看成要匹配的文字为{字符串}那么{字符串}会替换成$user['字符串']$command=$user['字符串']如果?12345$rule['condition']='{age}';$command=$user['age']$rule['condition']='{age}5';$command=$user['age']10@(eval('$condition=('.$command.');'));即:?1$condition=($user['age']10);这时再看下面代码如果为真则加为授权列表?123if($condition){$authList[]=strtolower($rule['name']);}

PHP数据库验证登陆

你记住 所有在 引号里面的 东西都是字符串!!!!!

if("SELECT username,passwd FROM wen WHERE $username=$user,$passwd=$passwd"){

echo "scriptalert('欢迎登录!');window.location.href='index1.php';/script";

}

这一句代码本身就是不通的.

还有就是 你的sql语句也是错误的。

参考如下:

$sql = 'SELECT username,passwd FROM wen WHERE username="'.$user.'" AND passwd="'.$passwd.'"';

$result = mysql_query($sql,$conn);

手动回复,不谢

php权限管理如何实现

可以使用acl控制实现,参考acl全集如下:

1、角色表

角色id - 用户组id - 特殊权限id(其中特殊权限 用户组所包含权限)

2、用户组表

用户组id - 用户组信息

3、权限表

权限表id - 权限信息 - 与功能模块的关系

4、用户组-权限关联表

用户组id - 权限集合

5、特殊权限表

特殊权限id - 权限集合

注意:

1、设置权限的删除、添加主要围绕在 用户组-权限关联表、特殊权限表。

2、用户的权限获取则是验证登陆的时候通过用户组和特殊权限获取权限集合。

3、展示的时候,根据2获取的权限集合从权限表获取所有功能模块的导航菜单。

PHP网站用户权限数据库思路

这个网上方法挺多的,个人认为最简单的就是在管理员表加个权限字段,在显示栏目处加个判断,不过这种方法不是很安全;再就是在数据库建张node表、role表、role_user表、access表,其中node表存放结点,也就是栏目,role表存放权限,role_user表就是用户权限表,access表存放node_id、role_id等,不过中间有好多细节需要好好琢磨

php里,管理员登录,就可以修改数据库数据,这个权限的原理是什么?

利用session和cookie实现,

session是保存在服务器的会话记录,当管理员登陆后,对于每个管理操作,都有一段PHP代码用于检查session中的用户是否管理员身份,是则允许管理操作;

cookie是保存在浏览器的登陆数据,譬如登陆之后浏览器存下了用户名和登陆密码,每次与服务器的会话都向服务器发送cookie的数据,此过程中PHP提取cookie里的用户名和密码信息进行校验,通过后允许管理操作。


网页题目:php统一数据权限验证,php用户登录功能验证
网页链接:http://chengdu.cdxwcx.cn/article/hcssse.html