thinkphp的rbac容易理解么??
2个回答
展开全部
1、用到五张表
RBAC 用到了5个数据表
think_user (用户表)
think_role (用户分组表)
think_node (操作节点)
think_role_user (用户和用户分组的对应)
think_access (各个操作和用户组的对应)
并在think_access中增加一个pid字段
2、增加两个用户,admin,user用户名和密码一样,密码使用MD5加密
3、think_role (用户分组表)增加admin和user
think_role_user (用户和用户分组的对应)写入对应的信息
think_node节点(项目 1,模块 2,方法 3)之间的关系,你先得让用户能访问项目,模块,方法
(他们之间的关系,我们就叫做节点,如果说你需要将所有的节点全部可控制,
你就需要将所有的项目,项目下的模块,模块下的方法,全部加入到节点表当中去)
4、在think_access增加某个用户可以操作那些模块,以及模块下的某些方法
role_id那个用户的id node_id是那个节点的id level评级,pid是属于那个模块
5、在lib/action增加commonaction ,publicAction,IndexAction,UserAction
在commonAction中增加
class CommonAction extends Action{
function _initialize() {
// 用户权限检查
if (C ( 'USER_AUTH_ON' ) && !in_array(MODULE_NAME,explode(',',C('NOT_AUTH_MODULE')))) {
import ( 'ORG.Util.RBAC' );
if (! RBAC::AccessDecision ()) {
//检查认证识别号
if (! $_SESSION [C ( 'USER_AUTH_KEY' )]) {
//跳转到认证网关
redirect ( PHP_FILE . C ( 'USER_AUTH_GATEWAY' ) );
}
// 没有权限 抛出错误
if (C ( 'RBAC_ERROR_PAGE' )) {
// 定义权限错误页面
redirect ( C ( 'RBAC_ERROR_PAGE' ) );
} else {
if (C ( 'GUEST_AUTH_ON' )) {
$this->assign ( 'jumpUrl', PHP_FILE . C ( 'USER_AUTH_GATEWAY' ) );
}
// 提示错误信息
$this->error ( L ( '_VALID_ACCESS_' ) );
}
}
}
}
}
让publicAction和IndexAction都继承commonAction
6、配置文件
<?php
if (!defined('THINK_PATH')) exit();
$array=array(
'USER_AUTH_ON' =>true,
'USER_AUTH_TYPE' =>1, // 默认认证类型 1 登录认证 2 实时认证
'USER_AUTH_KEY' =>'authId', // 用户认证SESSION标记
'ADMIN_AUTH_KEY' =>'administrator',
'USER_AUTH_MODEL' =>'User', // 默认验证数据表模型
'AUTH_PWD_ENCODER' =>'md5', // 用户认证密码加密方式
'USER_AUTH_GATEWAY' =>'/Public/login',// 默认认证网关
'NOT_AUTH_MODULE' =>'Public', // 默认无需认证模块
'REQUIRE_AUTH_MODULE' =>'', // 默认需要认证模块
'NOT_AUTH_ACTION' =>'', // 默认无需认证操作
'REQUIRE_AUTH_ACTION' =>'', // 默认需要认证操作
'GUEST_AUTH_ON' =>false, // 是否开启游客授权访问
'GUEST_AUTH_ID' =>0, // 游客的用户ID
'RBAC_ROLE_TABLE' =>'think_role',
'RBAC_USER_TABLE' =>'think_role_user',
'RBAC_ACCESS_TABLE' =>'think_access',
'RBAC_NODE_TABLE' =>'think_node',
'SHOW_PAGE_TRACE'=>1//显示调试信息
);
$arr1=include './config.inc.php';
return array_merge($arr1,$array);
7、PublicAction的文件
public function index(){
$this->login();
}
public function login(){
$this->display();
}
public function checkLogin() {
if(empty($_POST['username'])) {
$this->error('帐号错误!');
}elseif (empty($_POST['password'])){
$this->error('密码必须!');
}
//生成认证条件
$map = array();
// 支持使用绑定帐号登录
$map['username'] = $_POST['username'];
import ( 'ORG.Util.RBAC' );
$authInfo = RBAC::authenticate($map);
//使用用户名、密码和状态的方式进行认证
//使用用户名、密码和状态的方式进行认证
if(false === $authInfo) {
$this->error('帐号不存在或已禁用!');
}else {
if($authInfo['password'] != md5($_POST['password'])) {
$this->error('密码错误!');
}
$_SESSION[C('USER_AUTH_KEY')] = $authInfo['id'];
if($authInfo['username']=='admin') {
$_SESSION['administrator'] = true;
}
// 缓存访问权限
RBAC::saveAccessList();
$this->success('登录成功!');
}
}
// 用户登出
public function logout()
{
if(isset($_SESSION[C('USER_AUTH_KEY')])) {
unset($_SESSION[C('USER_AUTH_KEY')]);
unset($_SESSION);
session_destroy();
$this->assign("jumpUrl",__URL__.'/login/');
$this->success('登出成功!');
}else {
$this->error('已经登出!');
}
}
8、运行http://localhost/Myapp/admin.php
如果出现登录页面,说明成功了,输入正确的用户名和密码
登录成功之后,访问相关的模块及方法
如果没有权限,它会报没此权限
9、以后要做的把相关的模块在后台进行控制,以及分角色管理
RBAC 用到了5个数据表
think_user (用户表)
think_role (用户分组表)
think_node (操作节点)
think_role_user (用户和用户分组的对应)
think_access (各个操作和用户组的对应)
并在think_access中增加一个pid字段
2、增加两个用户,admin,user用户名和密码一样,密码使用MD5加密
3、think_role (用户分组表)增加admin和user
think_role_user (用户和用户分组的对应)写入对应的信息
think_node节点(项目 1,模块 2,方法 3)之间的关系,你先得让用户能访问项目,模块,方法
(他们之间的关系,我们就叫做节点,如果说你需要将所有的节点全部可控制,
你就需要将所有的项目,项目下的模块,模块下的方法,全部加入到节点表当中去)
4、在think_access增加某个用户可以操作那些模块,以及模块下的某些方法
role_id那个用户的id node_id是那个节点的id level评级,pid是属于那个模块
5、在lib/action增加commonaction ,publicAction,IndexAction,UserAction
在commonAction中增加
class CommonAction extends Action{
function _initialize() {
// 用户权限检查
if (C ( 'USER_AUTH_ON' ) && !in_array(MODULE_NAME,explode(',',C('NOT_AUTH_MODULE')))) {
import ( 'ORG.Util.RBAC' );
if (! RBAC::AccessDecision ()) {
//检查认证识别号
if (! $_SESSION [C ( 'USER_AUTH_KEY' )]) {
//跳转到认证网关
redirect ( PHP_FILE . C ( 'USER_AUTH_GATEWAY' ) );
}
// 没有权限 抛出错误
if (C ( 'RBAC_ERROR_PAGE' )) {
// 定义权限错误页面
redirect ( C ( 'RBAC_ERROR_PAGE' ) );
} else {
if (C ( 'GUEST_AUTH_ON' )) {
$this->assign ( 'jumpUrl', PHP_FILE . C ( 'USER_AUTH_GATEWAY' ) );
}
// 提示错误信息
$this->error ( L ( '_VALID_ACCESS_' ) );
}
}
}
}
}
让publicAction和IndexAction都继承commonAction
6、配置文件
<?php
if (!defined('THINK_PATH')) exit();
$array=array(
'USER_AUTH_ON' =>true,
'USER_AUTH_TYPE' =>1, // 默认认证类型 1 登录认证 2 实时认证
'USER_AUTH_KEY' =>'authId', // 用户认证SESSION标记
'ADMIN_AUTH_KEY' =>'administrator',
'USER_AUTH_MODEL' =>'User', // 默认验证数据表模型
'AUTH_PWD_ENCODER' =>'md5', // 用户认证密码加密方式
'USER_AUTH_GATEWAY' =>'/Public/login',// 默认认证网关
'NOT_AUTH_MODULE' =>'Public', // 默认无需认证模块
'REQUIRE_AUTH_MODULE' =>'', // 默认需要认证模块
'NOT_AUTH_ACTION' =>'', // 默认无需认证操作
'REQUIRE_AUTH_ACTION' =>'', // 默认需要认证操作
'GUEST_AUTH_ON' =>false, // 是否开启游客授权访问
'GUEST_AUTH_ID' =>0, // 游客的用户ID
'RBAC_ROLE_TABLE' =>'think_role',
'RBAC_USER_TABLE' =>'think_role_user',
'RBAC_ACCESS_TABLE' =>'think_access',
'RBAC_NODE_TABLE' =>'think_node',
'SHOW_PAGE_TRACE'=>1//显示调试信息
);
$arr1=include './config.inc.php';
return array_merge($arr1,$array);
7、PublicAction的文件
public function index(){
$this->login();
}
public function login(){
$this->display();
}
public function checkLogin() {
if(empty($_POST['username'])) {
$this->error('帐号错误!');
}elseif (empty($_POST['password'])){
$this->error('密码必须!');
}
//生成认证条件
$map = array();
// 支持使用绑定帐号登录
$map['username'] = $_POST['username'];
import ( 'ORG.Util.RBAC' );
$authInfo = RBAC::authenticate($map);
//使用用户名、密码和状态的方式进行认证
//使用用户名、密码和状态的方式进行认证
if(false === $authInfo) {
$this->error('帐号不存在或已禁用!');
}else {
if($authInfo['password'] != md5($_POST['password'])) {
$this->error('密码错误!');
}
$_SESSION[C('USER_AUTH_KEY')] = $authInfo['id'];
if($authInfo['username']=='admin') {
$_SESSION['administrator'] = true;
}
// 缓存访问权限
RBAC::saveAccessList();
$this->success('登录成功!');
}
}
// 用户登出
public function logout()
{
if(isset($_SESSION[C('USER_AUTH_KEY')])) {
unset($_SESSION[C('USER_AUTH_KEY')]);
unset($_SESSION);
session_destroy();
$this->assign("jumpUrl",__URL__.'/login/');
$this->success('登出成功!');
}else {
$this->error('已经登出!');
}
}
8、运行http://localhost/Myapp/admin.php
如果出现登录页面,说明成功了,输入正确的用户名和密码
登录成功之后,访问相关的模块及方法
如果没有权限,它会报没此权限
9、以后要做的把相关的模块在后台进行控制,以及分角色管理
2014-05-06
展开全部
容易。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询