2018-08-04 17:54:43 +00:00
< ? php
namespace Admin\Controller ;
/**
* 权限管理
* @ author Devil
* @ blog http :// gong . gg /
* @ version 0.0 . 1
* @ datetime 2016 - 12 - 01 T21 : 51 : 08 + 0800
*/
class PowerController extends CommonController
{
/**
* [ _initialize 前置操作 - 继承公共前置方法 ]
* @ author Devil
* @ blog http :// gong . gg /
* @ version 0.0 . 1
* @ datetime 2016 - 12 - 03 T12 : 39 : 08 + 0800
*/
public function _initialize ()
{
// 调用父类前置方法
parent :: _initialize ();
// 登录校验
$this -> Is_Login ();
// 权限校验
$this -> Is_Power ();
}
/**
* [ Index 权限组列表 ]
* @ author Devil
* @ blog http :// gong . gg /
* @ version 0.0 . 1
* @ datetime 2016 - 12 - 06 T21 : 31 : 53 + 0800
*/
public function Index ()
{
// 获取权限列表
$m = M ( 'Power' );
$field = array ( 'id' , 'pid' , 'name' , 'control' , 'action' , 'sort' , 'is_show' , 'icon' );
$list = $m -> field ( $field ) -> where ( array ( 'pid' => 0 )) -> order ( 'sort' ) -> select ();
if ( ! empty ( $list ))
{
foreach ( $list as $k => $v )
{
$item = $m -> field ( $field ) -> where ( array ( 'pid' => $v [ 'id' ])) -> order ( 'sort' ) -> select ();
if ( ! empty ( $item ))
{
$list [ $k ][ 'item' ] = $item ;
}
}
}
$this -> assign ( 'common_is_show_list' , L ( 'common_is_show_list' ));
$this -> assign ( 'list' , $list );
$this -> display ( 'Index' );
}
/**
* [ PowerSave 权限添加 / 编辑 ]
* @ author Devil
* @ blog http :// gong . gg /
* @ version 0.0 . 1
* @ datetime 2016 - 12 - 13 T21 : 41 : 03 + 0800
*/
public function PowerSave ()
{
// 是否ajax请求
if ( ! IS_AJAX )
{
$this -> error ( L ( 'common_unauthorized_access' ));
}
// id为空则表示是新增
$m = D ( 'Power' );
// 公共额外数据处理
$m -> sort = intval ( I ( 'sort' ));
// 添加
if ( empty ( $_POST [ 'id' ]))
{
if ( $m -> create ( $_POST , 1 ))
{
// 额外数据处理
$m -> add_time = time ();
$m -> name = I ( 'name' );
$m -> control = I ( 'control' );
$m -> action = I ( 'action' );
$m -> icon = I ( 'icon' );
// 写入数据库
if ( $m -> add ())
{
// 清除用户权限数据
PowerCacheDelete ();
$this -> ajaxReturn ( L ( 'common_operation_add_success' ));
} else {
$this -> ajaxReturn ( L ( 'common_operation_add_error' ), - 100 );
}
}
} else {
// 编辑
if ( $m -> create ( $_POST , 2 ))
{
// 额外数据处理
$m -> name = I ( 'name' );
$m -> control = I ( 'control' );
$m -> action = I ( 'action' );
$m -> icon = I ( 'icon' );
// 移除 id
unset ( $m -> id );
// 更新数据库
if ( $m -> where ( array ( 'id' => I ( 'id' ))) -> save ())
{
// 清除用户权限数据
PowerCacheDelete ();
$this -> ajaxReturn ( L ( 'common_operation_edit_success' ));
} else {
$this -> ajaxReturn ( L ( 'common_operation_edit_error' ), - 100 );
}
}
}
$this -> ajaxReturn ( $m -> getError (), - 1 );
}
/**
* [ PowerDelete 权限删除 ]
* @ author Devil
* @ blog http :// gong . gg /
* @ version 0.0 . 1
* @ datetime 2016 - 12 - 14 T21 : 40 : 29 + 0800
*/
public function PowerDelete ()
{
if ( ! IS_AJAX )
{
$this -> error ( L ( 'common_unauthorized_access' ));
}
$m = D ( 'Power' );
if ( $m -> create ( $_POST , 5 ))
{
if ( $m -> delete ( I ( 'id' )))
{
// 清除用户权限数据
PowerCacheDelete ();
$this -> ajaxReturn ( L ( 'common_operation_delete_success' ));
} else {
$this -> ajaxReturn ( L ( 'common_operation_delete_error' ), - 100 );
}
} else {
$this -> ajaxReturn ( $m -> getError (), - 1 );
}
}
/**
* [ Role 角色组列表 ]
* @ author Devil
* @ blog http :// gong . gg /
* @ version 0.0 . 1
* @ datetime 2016 - 12 - 14 T21 : 37 : 02 + 0800
*/
public function Role ()
{
$m = M ( 'Role' );
$list = $m -> field ( array ( 'id' , 'name' , 'is_enable' , 'add_time' )) -> select ();
if ( ! empty ( $list ))
{
foreach ( $list as $k => $v )
{
// 关联查询权限和角色数据
if ( $v [ 'id' ] == 1 )
{
$list [ $k ][ 'item' ] = M ( 'Power' ) -> select ();
} else {
$list [ $k ][ 'item' ] = $m -> alias ( 'r' ) -> join ( '__ROLE_POWER__ AS rp ON rp.role_id = r.id' ) -> join ( '__POWER__ AS p ON rp.power_id = p.id' ) -> where ( array ( 'r.id' => $v [ 'id' ])) -> field ( array ( 'p.id' , 'p.name' )) -> select ();
}
}
}
$this -> assign ( 'list' , $list );
$this -> display ( 'Role' );
}
/**
* [ RoleSaveInfo 角色组添加 / 编辑页面 ]
* @ author Devil
* @ blog http :// gong . gg /
* @ version 0.0 . 1
* @ datetime 2016 - 12 - 14 T21 : 37 : 02 + 0800
*/
public function RoleSaveInfo ()
{
// 角色组
$role = M ( 'Role' ) -> field ( array ( 'id' , 'name' , 'is_enable' )) -> find ( I ( 'id' ));
$role_id = isset ( $role [ 'id' ]) ? $role [ 'id' ] : $this -> admin [ 'role_id' ];
$power = array ();
if ( $role_id > 0 )
{
// 权限关联数据
$action = empty ( $_REQUEST [ 'id' ]) ? array () : M ( 'RolePower' ) -> where ( array ( 'role_id' => $role_id )) -> getField ( 'power_id' , true );
// 权限列表
$m = M ( 'Power' );
$power_field = array ( 'id' , 'name' , 'is_show' );
$power = $m -> field ( $power_field ) -> where ( array ( 'pid' => 0 )) -> order ( 'sort' ) -> select ();
if ( ! empty ( $power ))
{
foreach ( $power as $k => $v )
{
// 是否有权限
$power [ $k ][ 'is_power' ] = in_array ( $v [ 'id' ], $action ) ? 'ok' : 'no' ;
// 获取子权限
$item = $m -> field ( $power_field ) -> where ( array ( 'pid' => $v [ 'id' ])) -> order ( 'sort' ) -> select ();
if ( ! empty ( $item ))
{
foreach ( $item as $ks => $vs )
{
$item [ $ks ][ 'is_power' ] = in_array ( $vs [ 'id' ], $action ) ? 'ok' : 'no' ;
}
$power [ $k ][ 'item' ] = $item ;
}
}
}
}
$this -> assign ( 'common_is_enable_list' , L ( 'common_is_enable_list' ));
$this -> assign ( 'data' , $role );
$this -> assign ( 'power' , $power );
$this -> display ( 'RoleSaveInfo' );
}
/**
* [ RoleSave 角色组添加 / 编辑 ]
* @ author Devil
* @ blog http :// gong . gg /
* @ version 0.0 . 1
* @ datetime 2016 - 12 - 14 T21 : 37 : 02 + 0800
*/
public function RoleSave ()
{
// 是否ajax请求
if ( ! IS_AJAX )
{
$this -> error ( L ( 'common_unauthorized_access' ));
}
// 添加
if ( empty ( $_POST [ 'id' ]))
{
$this -> RoleAdd ();
// 编辑
} else {
if ( I ( 'id' ) == 1 )
{
$this -> error ( L ( 'common_do_not_operate' ), - 10 );
} else {
$this -> RoleEdit ();
}
}
}
/**
* [ RoleAdd 角色添加 ]
* @ author Devil
* @ blog http :// gong . gg /
* @ version 0.0 . 1
* @ datetime 2016 - 12 - 18 T16 : 20 : 59 + 0800
*/
private function RoleAdd ()
{
// 角色对象
$r = M ( 'Role' );
// 数据自动校验
if ( $r -> create ( $_POST , 1 ))
{
// 开启事务
$r -> startTrans ();
// 角色添加
$role_data = array (
'name' => I ( 'name' ),
'is_enable' => I ( 'is_enable' ),
'add_time' => time (),
);
$role_id = $r -> add ( $role_data );
// 角色权限关联添加
2018-11-13 09:53:46 +00:00
$rp_status = true ;
if ( ! empty ( $_POST [ 'power_id' ]))
2018-08-04 17:54:43 +00:00
{
// 角色权限关联对象
$rp = M ( 'RolePower' );
2018-11-13 09:53:46 +00:00
foreach ( explode ( ',' , I ( 'power_id' )) as $power_id )
2018-08-04 17:54:43 +00:00
{
if ( ! empty ( $power_id ))
{
$rp_data = array (
'role_id' => $role_id ,
'power_id' => $power_id ,
'add_time' => time (),
);
if ( ! $rp -> add ( $rp_data ))
{
2018-11-13 09:53:46 +00:00
$rp_status = false ;
2018-08-04 17:54:43 +00:00
break ;
}
}
}
}
2018-11-13 09:53:46 +00:00
if ( $role_id && $rp_status )
2018-08-04 17:54:43 +00:00
{
// 提交事务
$r -> commit ();
// 清除用户权限数据
PowerCacheDelete ();
$this -> ajaxReturn ( L ( 'common_operation_add_success' ));
} else {
// 回滚事务
$r -> rollback ();
$this -> ajaxReturn ( L ( 'common_operation_add_error' ), - 100 );
}
} else {
$this -> ajaxReturn ( $m -> getError (), - 1 );
}
}
/**
* [ RoleEdit 角色和角色权限关联编辑 ]
* @ author Devil
* @ blog http :// gong . gg /
* @ version 0.0 . 1
* @ datetime 2016 - 12 - 17 T22 : 13 : 40 + 0800
*/
private function RoleEdit ()
{
// 角色对象
$r = M ( 'Role' );
// 数据自动校验
if ( $r -> create ( $_POST , 2 ))
{
// 开启事务
$r -> startTrans ();
// 角色数据更新
$role_data = array (
'name' => I ( 'name' ),
'is_enable' => I ( 'is_enable' ),
);
$r_state = ( $r -> where ( array ( 'id' => I ( 'id' ))) -> save ( $role_data ) !== false );
// 角色权限关联对象
$rp = M ( 'RolePower' );
// 角色id
$role_id = I ( 'id' );
// 权限关联数据删除
$rp_del_state = $rp -> where ( array ( 'role_id' => $role_id )) -> delete ();
// 权限关联数据添加
2018-11-13 09:53:46 +00:00
$rp_status = true ;
2018-08-04 17:54:43 +00:00
if ( ! empty ( $_POST [ 'power_id' ]))
{
2018-11-13 09:53:46 +00:00
foreach ( explode ( ',' , I ( 'power_id' )) as $power_id )
2018-08-04 17:54:43 +00:00
{
if ( ! empty ( $power_id ))
{
$rp_data = array (
'role_id' => $role_id ,
'power_id' => $power_id ,
'add_time' => time (),
);
if ( ! $rp -> add ( $rp_data ))
{
2018-11-13 09:53:46 +00:00
$rp_status = false ;
2018-08-04 17:54:43 +00:00
break ;
}
}
}
}
2018-11-13 09:53:46 +00:00
if ( $r_state !== false && $rp_del_state !== false && $rp_status !== false )
2018-08-04 17:54:43 +00:00
{
// 提交事务
$r -> commit ();
// 清除用户权限数据
PowerCacheDelete ();
$this -> ajaxReturn ( L ( 'common_operation_edit_success' ));
} else {
// 回滚事务
$r -> rollback ();
$this -> ajaxReturn ( L ( 'common_operation_edit_error' ), - 100 );
}
} else {
$this -> ajaxReturn ( $m -> getError (), - 1 );
}
}
/**
* [ RoleDelete 角色删除 ]
* @ author Devil
* @ blog http :// gong . gg /
* @ version 0.0 . 1
* @ datetime 2016 - 12 - 15 T11 : 03 : 30 + 0800
*/
public function RoleDelete ()
{
// 是否ajax请求
if ( ! IS_AJAX )
{
$this -> error ( L ( 'common_unauthorized_access' ));
}
// 参数是否有误
if ( empty ( $_POST [ 'id' ]))
{
$this -> ajaxReturn ( L ( 'common_param_error' ), - 1 );
}
// 角色模型
$r = M ( 'Role' );
// 开启事务
$r -> startTrans ();
// 删除角色
2018-11-13 09:53:46 +00:00
$role_status = $r -> delete ( I ( 'id' ));
$rp_status = M ( 'RolePower' ) -> where ( array ( 'role_id' => I ( 'id' ))) -> delete ();
if ( $role_status !== false && $rp_status !== false )
2018-08-04 17:54:43 +00:00
{
// 提交事务
$r -> commit ();
// 清除用户权限数据
PowerCacheDelete ();
$this -> ajaxReturn ( L ( 'common_operation_delete_success' ));
} else {
// 回滚事务
$r -> rollback ();
$this -> ajaxReturn ( L ( 'common_operation_delete_error' ), - 100 );
}
}
2018-11-13 09:53:46 +00:00
/**
* [ RoleStatusUpdate 角色状态更新 ]
* @ author Devil
* @ blog http :// gong . gg /
* @ version 0.0 . 1
* @ datetime 2017 - 01 - 12 T22 : 23 : 06 + 0800
*/
public function RoleStatusUpdate ()
{
// 参数
if ( empty ( $_POST [ 'id' ]) || ! isset ( $_POST [ 'state' ]))
{
$this -> ajaxReturn ( L ( 'common_param_error' ), - 1 );
}
// 数据更新
if ( M ( 'Role' ) -> where ( array ( 'id' => I ( 'id' ))) -> save ( array ( 'is_enable' => I ( 'state' ))))
{
$this -> ajaxReturn ( L ( 'common_operation_edit_success' ));
} else {
$this -> ajaxReturn ( L ( 'common_operation_edit_error' ), - 100 );
}
}
2018-08-04 17:54:43 +00:00
}
?>