Files
OMS/app/desktop/model/roles.php
2026-01-04 19:08:31 +08:00

218 lines
6.8 KiB
PHP

<?php
/**
* Copyright 2012-2026 ShopeX (https://www.shopex.cn)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
class desktop_mdl_roles extends dbeav_model{
##进回收站前操作
function pre_recycle($data)
{
$falg = true;
$obj_hasrole = app::get('desktop')->model('hasrole');
$arr_role = array();
foreach($data as $val){
$arr_role[] = $val['role_id'];
}
$row = $obj_hasrole->getList('role_id',array('role_id' => $arr_role));
if($row){
$this->recycle_msg = app::get('desktop')->_('角色下存在管理员,不能删除');
$falg = false;
}
if (in_array('1', $arr_role)) {
$role = $this->dump('1');
$this->recycle_msg = app::get('desktop')->_('【' . $role['role_name'] . '】为系统内置角色,不能删除');
$falg = false;
}
return $falg;
}
/*从回收站恢复*/
function pre_restore(&$data,$restore_type='add'){
if(!$this->is_exists($data['role_name']) && $restore_type == 'add'){
$data['need_delete'] = true;
return true;
}
elseif($this->is_exists($data['role_name'])){
if($restore_type == 'add'){
$new_name = $data['role_name'].'_1';
while($this->is_exists($new_name)){
$new_name = $new_name.'_1';
}
$data['role_name'] = $new_name;
$data['need_delete'] = true;
return true;
}
if($restore_type == 'none'){
return true;
}
}
else
{
$data['need_delete'] = true;
return true;
}
}
function is_exists($role_name)
{
$row_data = $this->getList('role_id',array('role_name'=>$role_name));
if($row_data)
return true;
else
return false;
}
function getAllActions(){
$actions = array(
'1'=>app::get('desktop')->_('商品'),
'2'=>app::get('desktop')->_('订单'),
'3'=>app::get('desktop')->_('会员'),
'4'=>app::get('desktop')->_('营销推广'),
'5'=>app::get('desktop')->_('页面管理'),
'6'=>app::get('desktop')->_('统计报表'),
'7'=>app::get('desktop')->_('商店配置'),
'8'=>app::get('desktop')->_('工具箱'),
);
if($this->app->getConf('certificate.distribute')){
$actions['29'] = app::get('desktop')->_('采购中心');
}
return $actions;
}
function rolemap(){
$map = array(
'goods'=>1,
'order'=>2,
'member'=>3,
'sale'=>4,
'site'=>5,
'analytics'=>6,
'setting'=>7,
'tools'=>8,
);
if($this->app->getConf('certificate.distribute')){
$map['distribution'] = 29;
}
return $map;
}
function getColumns(){
$ret = array('_cmd'=>array('label'=>app::get('desktop')->_('操作'),'width'=>75,'html'=>'admin/roles_cmd.html'));
return array_merge($ret,parent::getColumns());
}
function instance($role_id){
$role = parent::instance($role_id);
if($role){
$rows = $this->db->select('select * from sdb_lnk_acts where role_id='.intval($role_id));
foreach($rows as $r){
$role['actions'][] = $r['action_id'];
}
}
return $role;
}
function updatebak($data,$filter){
$c = parent::update($data,$filter);
if($filter['role_id']){
$role_id = array();
foreach($this->getList('role_id',$filter) as $r){
$role_id[] = $r['role_id'];
}
}else{
$role_id = $filter['role_id'];
}
if(count($role_id)==1){
$rows = $this->db->select('select action_id from sdb_lnk_acts where role_id in ('.implode(',',$role_id).')');
$in_db = array();
foreach($rows as $r){
$in_db[] = $r['action_id'];
}
$data['actions'] = $data['actions']?$data['actions']:array();
$to_add = array_diff($data['actions'],$in_db);
$to_del = array_diff($in_db,$data['actions']);
if(count($to_add)>0){
$sql = 'INSERT INTO `sdb_lnk_acts` (`role_id`,`action_id`) VALUES ';
foreach($to_add as $action_id){
$actions[] = "({$role_id[0]},$action_id)";
}
$sql .= implode($actions,',').';';
$a = $this->db->exec($sql);
}
if(count($to_del)>0){
$this->db->exec('delete from sdb_lnk_acts where action_id in ('.implode(',',$to_del).') and role_id='.intval($role_id[0]));
}
}else{
}
return $c;
}
function insert(&$data){
$role_id = parent::insert($data);
if($role_id && is_array($data['actions'])){
$sql = 'INSERT INTO `sdb_lnk_acts` (`role_id`,`action_id`) VALUES ';
foreach($data['actions'] as $action_id){
$actions[] = "($role_id,$action_id)";
}
$sql .= implode($actions,',').';';
$a = $this->db->exec($sql);
}
return $role_id;
}
####检查工作组名称
function check_gname($name){
# $result = $this->db->select("select * from sdb_desktop_roles where role_name='$name'");
$result = $this->getList('role_id',array('role_name'=>$name));
if($result){
return $result[0]['role_id'];
}
else{
return false;
}
}
function validate($aData,&$msg){
if($aData['role_name']==''){
$msg = app::get('desktop')->_("工作组名称不能为空");
return false;
}
if(!$aData['workground']){
$msg = app::get('desktop')->_("请至少选择一个权限");
return false;
}
$opctl = $this->app->model('roles');
$result = $opctl->check_gname($aData['role_name']);
if($result){
$msg = app::get('desktop')->_("该名称已经存在");
return false;
}
return true;
}
}
?>