define('IN_PHPCMS') または exit('許可リソースがありません。');
/* phpcms v9 はログインにセッションを使用します。セッションを保存するには 2 つの方法があります。1 つはデータベース ストレージで、もう 1 つはファイル保存方法、デフォルトはデータベース保存方法です。場合によっては、データベース メソッドが機能しないことがあります。cachesconfigssystem.php //セッション設定 'session_storage' => 'mysql' でセッション ストレージ メソッドを変更し、 //セッション設定 'session_storage' => 'files' に変更することができます。空にすることはできません。空にしないと、ログインが成功しません。 */
$session_storage = 'session_'.pc_base::load_config('system','session_storage');//セッションストレージメソッドはファイルに保存されます
pc_base::load_sys_class($session_storage)
if(param:: get_cookie( 'sys_lang')) { //言語パック
define('SYS_STYLE',param::get_cookie('sys_lang')) //ログイン時に設定
} else {
define('SYS_STYLE','zh- cn');
}
//バックグラウンドで定義
define('IN_ADMIN',true);
class admin {
public $userid;
public $username;
public function __construct() {
self::check_admin ( ; (L('module_not_exists')); //モジュールが存在しません。 Self::manage_log();
self::check_ip(); ロック画面
pc_base::load_config('system', 'admin_url) を使用して使用します')){
header( "http/1.1/
final public function check_admin(){
//ログインインターフェイスでモデルを取得した場合
// route_m、route_cコントローラーを取得、route_a取得イベント' && in_array(route_a(route_a(route_a) , Array ('Login', 'Public_card')) {
Return true // true に返されると、フォローアップ コードが実行されます
} else {
// セッションに userid、rootid があるかどうかを判断します。何らかのケースがある場合は処理します。そうでない場合は、ログイン インターフェースに戻ります
$userid = param::get_cookie('userid');
if(!isset($_SESSION['userid']) || !isset ($_SESSION['roleid']) || !$_SESSION['userid'] || $userid != $_SESSION['userid']) showmessage(L('admin_login') ),'?m=admin&c=index&a=login ');
}
}
/**
* ユーザーがログインしたかどうかを判断します
*/
を使って を使って ‐ ‐ ' を使用して ' を使用して ' を使用して ' を使用してwar through '' through to ‐ ‐ ‐‐ ‐ ‐ to if(empty($m)) return false; //$m が空の場合は false を返します
Return PC_PATH.'modules'.DIRECTORY_SEPARATOR.$m.DIRECTORY_SEPARATOR.' templates'.DIRECTORY_SEPARATOR.$file.'.tpl.php' ; // modules/ROUTE_M/templates/ に戻る 接尾辞は $file.tpl.php
}
/**
* 管理メニューを取得
* 親 ID でメニュー項目を検索
* @param integer $parentid 親メニュー ID
* @param integer $with_self 自分自身を含めるかどうか
* @param メニューはメニュー データ テーブルに格納されます。二次開発で新しいメニューを追加する必要がある場合、対応するメニューの id、name、parentid、m、c、a、data などの情報をメニュー テーブルに挿入するだけで済みます。もちろん、スーパー管理者以外のロールがメニューにアクセスできるようにするには、admin_role_priv テーブルで権限を設定する必要があります。 In */a FINAL PUBLIC Static Function Admin_menu ($ Parentid, $ With_SELF = 0) {
$ Parentid = INTVAL ($ Parentid); // 変数の整数値を取得します = pc_base ::load_model (' menu_model'); //データベースやその他の操作を実装するためにモデルのサブクラスを参照します
' display '= & gt
if ($ site_model && $parentid) {
$ when [$ site_model] = 1; }
}
$ result = $ menudb->select($where,'*',1000,'listorder ASC'); //listorder はバックグラウンドでソートされる前の番号であり、編集可能です
if($ with_self) {
$result2[] = $menudb->get_one(array('id'=>$parentid));
$result = array_merge($result2,$result); //array_merge — の値を割り当てます。配列を前の配列に
/権限チェック。スーパー管理者の場合は、すべてを返します
use using admin using admin ’s admin to use admin ' admin_role_priv_model テーブルを使用して admin_role_priv_model テーブルを取得します
$array = array();
$privdb = pc_base::load_model(' admin_role_priv_model'); // モデルのサブクラスを呼び出します
$siteid = param::get_cookie('siteid');
foreach($result as $v) {
$action = $v['a']; ] = $ V ; e} Else {
// AJAX のメソッドの場合、メソッドの後半のみが取得されます (preg_match ('/^ajax _ ([a-z]+) _/', $ __match)) $ action = $_match [1];
// 現在のロール $roleid に、m、c、および a の対応する操作権限レコードがあるかどうかを取得してみます // 現在のロール $roleid に、m、c、に対応する操作権限があるかどうかを取得してみますそしてレコード
$r = $privdb->get_one(array('m'=>$v['m'],'c'=>$v['c'],'a'=> $action , 'ROLEID' = & GT; $ _ session ['rootid'], 'siteid' = & gt; 。$ vを$ arayに割り当てます[]最終的なpublic static function submenu($ parentid = ''、$ big_menu = false){
> route_m、 'c' => route_c、 'a' => route_a)); self :: admin_menu($ parentid、1); = $ _Value ['m'] && route_c == $ _value ['c'] && route_a == $ _value ['a'] "on" ':' ';
} )): '';
$classname = ROUTE_M == $_value['m'] && ROUTE_C == $_value['c'] && ROUTE_A == $_value['a'] && $_GET['s '] == $_s ? 'class="on"' : '; if($classname) {
$string .= "".L($_value['name']) "</em></a>< span> |</span>";
"&a ="。$ _ value ['a']。 "&menuid = $ partid&pc_hash = $ pc_hash"。 '&' .$_value['data']."' $classname>".L($_value ['name'])."|スパン>;
return $string;
}
/**
* メニューヘッダーのメニューナビゲーションを取得します
*
* @param $parentid メニュー ID
* @param は主に関連メニューのすべてのサブメニュー ナビゲーションを生成するために使用されます (通常は iframe フレームの上部に表示されます)コンテンツページ)
*/
//再帰を使用して、特定のメニューのすべての親メニュー レベルを取得し、それを HTML フラグメントとして返します
Final public static function current_pos( $id) {
$menudb = pc_base::load_model('menu_model');
$r =$menudb->get_one(array('id'=>$id),'id,name,parentid');
$str = '';
if($r['parentid']) {
$str = self::current_pos($r['parentid']) ';
}
/**
* 現在のサイトIDを取得します
*/
最終的なパブリック静的関数 get_siteid() {
return get_siteid();
}
/**获 *
* 現在のサイト情報を取得します
@param Integer $ Siteid サイト ID 番号、現在のサイト情報を取得してください
@Return array
**/
最終的なパブリック静的関数 get_site ($siteid = '' ) {
; ',',$sites->get_role_siteid($_SESSION['roleid']));
Return current($siteid);
}
/**
※許可判断
*/
//ユーザーは m、c、a、操作権限にアクセスしています
最終パブリック関数 check_priv() {
//ログイン インターフェース: true が返されると、後続のコードの実行は終了します
if(ROUTE_M =='admin' && ROUTE_C = ='index' && in_array( Route_a, Array ('Login', 'Init', 'Public_card'))) Return true;
// ROLEID: 1 スーパー管理者、後のコードの実行
($ _ session ['rootid [' rootid ['rootid '] == 1) return true;
$siteid = param::get_cookie('siteid'); //サイトID
$action = ROUTE_A; //メソッド
= pc_base::load_model('admin_role_priv_model');
ROUTE_A)) return true //メソッドが public_ で始まる場合 )) { //メソッドajax_ から始まり、後半のみをクエリ条件としてインターセプトします
$action = $_match[1]; // 一致する結果
}
レコード
$r =$privdb->get_one(array('m'= >ROUTE_M,'c'=>ROUTE_C,'a'=>$action,'roleid'=>$ _SESSION['roleid'],'siteid'=>$siteid));
if(! $r) showmessage('この項目を操作する権限がありません','blank');
}
/**
*
* ログを記録する
*/
final private function manage_log() {
を使用するには using ‐ を使用しますto use ' use using using ' using using ' ‐ ' through using ' ‐ ' スルー out using out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out アウトアウト操作logは、「s」を使用して「s」を使用して「s」を使用して「s」を使用して「s」を使用して「s」を使用して「s」を使用して使用して使用して操作ログを使用して使用します。else {$ ip = ip(); '?m='.ROUTE_M.'&c='.ROUTE_C.'&a='.ROUTE_A; //操作アドレス$username,'userid'=>$userid,'action'=>ROUTE_C, 'クエリ文字列' =>$url,'time'=>$time,'ip'=>$ip))) / /操作ログをデータベースに記録します
ipbanned_model');
$ This-& gt-& gt; ; check_ip ();
}
/**
*
* バックエンドIP禁止の判断...
*/
最終プライベート関数 Lock_Screen () {
(_ _Session ['lock_screen'] && $_Session ['Lock_screen ']==1) {
if( preg_match('/^public_/', ROUTE_A) || (ROUTE_M == 'コンテンツ' && ROUTE_C == 'create_html') || (ROUTE_A == 'ログイン') (ROUTE_M == 'search' && ROUTE_C == 'search_admin' && ROUTE_A=='createindex')) return true;
}
}
/**
* ロック画面のステータスを確認します
*/
function check_hash() {
使用使用する 使用する スルーオフスルーオフ - オフ - スルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルー‐to‐under‐stage は admin&c=index&a=login' への管理に使用されます。 リリース pp p p (preg_match ('/^public_/', Route_a) || Route_m == 'admin' && Route_c == 'Index' || in_array (Route_a, Array ('Login')) {
Return true; } // getでもpostでも、サーバーのPC_hashに対応できればPass
IF (ISSET ($ _ get) ['pc_hash']) && $ _SESSION ['pc_hash'] = '' ' && ($_SESSION['pc_hash'] == $_GET['pc_hash'])) {
' && ($_SESSION['pc_hash' ] == $_POST['pc_hash'])) {
,,,,,,,,,,,,,,,,,, }
}
/**
* バックエンド情報リストのテンプレート
* @param string $id 選択したテンプレートの名前
* @param string $str フォーム内の属性名
*/
以上、phpcms の adminclassphp を介して、側面の内容が含まれており、PHP 教程に関心のある友人の助けになることを望みます。