① php,審核功能怎麼實現
在你要審核的信息表中加一個is_audit欄位,審核通過的話is_audit置為1,否則置為0。說白了就是一個簡單的update語句。
② 一個角色對應多個部門,後台怎麼同時把角色和多個部門都傳過去。 php中
方案一:
資料庫三個表,角色表,部門表,中間表。中間表記錄角色id和部門id。用角色id為條件,查詢中間表,並left join角色表和部門表,能得到同個角色不同部門的多條記錄。
方案二:
角色表專門用個欄位記錄部門id,多個部門id用分隔符隔開,用角色id查詢角色表,獲得部門id字元串,再把字元串用explode轉為數組,得到每一個部門id,循環查詢獲得每個部門信息。
③ php審批管理系統該怎麼實現
可以這樣做,在一個表加一個欄位,欄位默認為0,為1是通過審核,為0是待審核,為-1的審核不通過,
④ 誰用thinkPHP+工作流引擎設計過審批程序
本文中盡量避免審批概念,因為在我們認為沒有審批節點或者審核節點,任何節點都是數據採集.
1, 取回處理,也可以稱為提前處理,是對於擁有絕對審批許可權的人,為了工作的需要直接的從下屬工作人員中取回工作而直接處理。
2,這種做法是違反規范的,但是在一些場景下是需要的。比如:
1, 下屬長期不處理。
2, 下屬在外地.
3, 特殊的情況下不需要讓特定下屬知道此事件.
可能遇到的情況:
1, 被取回的點有多個人處理?
2, 什麼樣的數據范圍可以被取回?怎麼去控制?
3, 工作流程引擎是不完全計算下幾步驟的處理人員的.
4, 特殊權利的節點需要,需要指定,並且訪問規則必須是按人員,或者按崗位.
處理方案:
1, 此功能需要後台設置與前台處理兩大部分.
⑤ php後台多用戶許可權設置及實現思路
adminconfig.php 這是後台系統中所有文件許可權配置。
fun.php 這是一個功能函數
left.php 網站後台根據用戶登錄的ID來載入相對應的功能菜單
op.php 調用adminconfig.php 默認許可權文件
opsava.php 保存用戶許可權成一個php文件
好了我們先來看看 fun.php文件吧。
. 代碼如下:
<?
function findsub($keys ,$userid='abc' ) //此函數重要就是為了調用用戶的許可權信息
{
include('user/'.$userid.'.php');
foreach($bb as $key=>$submenu)
{
foreach($submenu as $subkey=>$menuitem)
{
if( $subkey == $keys )
{
return 1;
}
}
}
}
//下面為生成用戶的php許可權文件
//寫入
function cache_write($name, $var, $values) {
$cachefile = 'op/www.hzhuti.com/'.$name.'.php';
$cachetext = "<?phprn".'$'.$var.'='.arrayeval($values)."rn?>";
if(!swritefile($cachefile, $cachetext))
{
exit("File: $cachefile write error.");
}
}
//數組轉換成字串
function arrayeval($array, $level = 0) {
$space = '';
for($i = 0; $i <= $level; $i++) {
$space .= "t";
}
$evaluate = "Arrayn$space(n";
$comma = $space;
foreach($array as $key => $val) {
$key = is_string($key) ? '''.addcslashes($key, ''\').''' : $key;
$val = !is_array($val) && (!preg_match("/^-?d+$/", $val) || strlen($val) > 12) ? '''.addcslashes($val, ''\').''' : $val;
if(is_array($val)) {
$evaluate .= "$comma$key => ".arrayeval($val, $level + 1);
} else {
$evaluate .= "$comma$key => $val";
}
$comma = ",n$space";
}
$evaluate .= "n$space)";
return $evaluate;
}
//寫入文件
function swritefile($filename, $writetext, $openmod='w') {
if(@$fp = fopen($filename, $openmod)) {
flock($fp, 2);
fwrite($fp, $writetext);
fclose($fp);
return true;
} else {
exit("File: $filename write error.");
return false;
}
}
?>
adminconfig.php 後台許可權配置文件,以一個數組形式保存
. 代碼如下:
<?
$menus = array(
'news' => array(
'caption'=>'資訊管理',
'icon'=>'admin/icon_15.gif',
'sub' => array(
'newsaddtype' => array('caption' => '分類增加', 'url' => 'news/addtype.php'),
'newstypemange' => array('caption' => '分類管理', 'url' => 'news/typemange.php'),
'newsnewsend' => array('caption' => '發布資訊', 'url' => 'news/newsend.php'),
'newsnewmange' => array('caption' => '資訊管理', 'url' => 'news/newmange.php'),
'newscomments' => array('caption' => '評論管理', 'url' => 'news/comments.php'),
),
),
'ask' => array(
'caption'=>'問卷調查',
'icon'=>'admin/icon_15.gif',
'sub' => array(
'voteadmin_subject_add' => array('caption' => '添加投票主題', 'url' => 'vote/admin_subject_add.php'),
'voteadmin_subject' => array('caption' => '管理投票主題', 'url' => 'vote/admin_subject.php'),
'voteadmin_title_add' => array('caption' => '添加投票問題', 'url' => 'vote/admin_title_add.php'),
'voteadmin_title' => array('caption' => '管理投票問題', 'url' => 'vote/admin_title.php'),
'voteadmin_question_add' => array('caption' => '添加投票答案', 'url' => 'vote/admin_question_add.php'),
'voteadmin_question' => array('caption' => '管理投票答案', 'url' => 'vote/admin_question.php'),
'voteadmin_system' => array('caption' => '投票初始配置', 'url' => 'vote/admin_system.php')
),
),
'ads' => array(
'caption'=>'廣告管理',
'icon'=>'admin/icon_15.gif',
'sub' => array(
'ada' => array('caption' => '增加廣告', 'url' => 'ada.php'),
'adm' => array('caption' => '廣告管理', 'url' => 'adm.php'),
'flashadd' => array('caption' => '焦點圖廣告增加', 'url' => 'flashadd.php'),
'flashad' => array('caption' => '焦點圖廣告管理', 'url' => 'flashad.php')
),
),
'mange' => array(
'caption'=>'系統管理員',
'icon'=>'admin/icon_15.gif',
'sub' => array(
'adminuser' => array('caption' => '管理員添加', 'url' => 'adminuser.php'),
'modpass' => array('caption' => '密碼修改', 'url' => 'modpass.php')
),
),
);
?>
left.php文件很簡單就是根據用戶登錄後ID讀出許可權
. 代碼如下:
<?
$userid = $_SESSION['adminid'];
include("op/admincofig.php");
include("op/ www.hzhuti.com /".$userid.".php");
foreach($bb as $key=>$submenu)
{
echo "<tr><td bgcolor="#D879A7" style="line-height:22px;text-align:center;color:#ffffff;"> nr <font color="#EA6A8D" face="Webdings"></font><b>".$menus[$key]['caption']."</b><br /></td></tr> nr <tr ><td bgcolor="F5E8F1">";
foreach($submenu as $subkey=>$menuitem)
{
$tmparr = explode("|",$menuitem);
echo "<font color="#EA6A8D" face="Webdings">4</font><a href='".$tmparr[1]."' target="mainframe">".$tmparr[0]."</a><br> nr";
}
echo "</td></tr> nr ";
}
op.php這個文件就是要調用我們的adminconfig.php文件,然後利用fun.php文件中函數把提供過來的數據保存成數組如圖
點擊保存我們調用了opsava.php 文件,代碼如下
. 代碼如下:
<?
include("op/fun.php");
if( $_POST )
{
$sarray = $_POST ;
cache_write($userid,'bb',$sarray);//寫入緩存
echo "<script>alert('編輯保存成功!');location='op.php?userid=".$userid."';</script>";
}
?>
保存成功後文件內容如
. 代碼如下:
<?php
$bb=Array
(
'member' => Array
(
'user_search' => '會員升級管理|user_search.php'
),
'membercy' => Array
(
'cyuser_search' => '會員升級管理|cyuser_search.php',
'cyuser_search5' => '交友會員|cyuser_search.php?grade=5'
),
'userid' => 7,
'button' => '保存編輯'
)
?>
這樣的話我們的left只要載入 7.php文件就只會顯示這里在的文件,這樣一個基本的後台許可權就完成了。
⑥ 請教如何用php和mysql 實現百思不得姐多用戶審貼功能求個思路或代碼。
每條帖子有一個欄位標記此帖子是否通過審核。
用戶有一個欄位標記此用戶是否有審帖許可權。
當一個有審帖許可權的用戶登錄後並點擊審帖,此時獲取資料庫中沒有被審核的帖子,用戶審核某個帖子後將帖子審核標志改為已審核。
⑦ 求教個php審批流 數組的問題
現在有8組數據
Array
(
[0] => Array
(
[l_id] => 1
[l_name] => 測試1
[l_confirm_id] =>
)
[1] => Array
(
[l_id] => 2
[l_name] => 測試222
[l_confirm_id] =>
)
[2] => Array
(
[l_id] => 3
[l_name] => 測試3
[l_confirm_id] =>
)
[3] => Array
(
[l_id] => 4
[l_name] => 用款申請
[l_confirm_id] =>
)
[4] => Array
(
[l_id] => 5
[l_name] => 測試11
[l_confirm_id] =>
)
[5] => Array
(
[l_id] => 7
[l_name] => 秋的請假申請
[l_confirm_id] => 88;91;
)
[6] => Array
(
[l_id] => 8
[l_name] => 測試請假申請1
[l_confirm_id] => 88;91;
)
[7] => Array
(
[l_id] => 9
[l_name] => 測試多人審批用款申請
[l_confirm_id] => 88;91;89;90
)
)
如l_confirm_id是審批人的id,
現在需只有l_confirm_id是第一位88的才可以看到後三個數據
91他們都不可以看到
⑧ php如何通過面向對象實現審核過程
1.建議使用工廠模式
2.寫一個public方法為入口,至於參數系審核內容,和審核人員
3.根據相關審核內容欄位實例化相關工廠類
4.1.在相關類判斷獲取目前審核內容狀態
4.2獲取相關人員許可權
4.1 => 4.2 判斷相關人員許可權是否可以操作審核內容的下一步動作
4.3 可以及時更新,返回true。否則返回false
⑨ 大家好,我正在用PHP做一個管理系統,有多個會員組,要求不同的用戶組用戶登陸後操作內容不同,如何實現
這種需求就是所謂的RBAC,即「基於角色的訪問控制」。基本原理就是整個許可權系統分四部分:用戶(user)、角色(role)、節點(node)和訪問列表(access);每個用戶都歸屬於至少一個角色,而不同的角色只能訪問特定的節點,角色與節點的這種對應關系保存在「訪問列表(access)」中。每當用戶進行一個操作訪問一個節點(具體為某個模塊的某個方法)時就去access表中檢查他所屬角色的許可權,許可權驗證通過則進行該操作,否則給予無許可權的提示。
要使用RBAC系統一般來說需要項目是MVC結構的。
更多詳細內容可以自己在網上搜索相關資料。
⑩ 怎樣用php實現編輯完美私服的角色數據
最近學習PHP5介面的過程中遇到了困難 ,書中說是實現多重繼承的一種方式,但我依然不知道具體該如何實現。在網上查PHP介面的資料很少,就查了java的,其實基本上都差不多。看完包裝機《澄清Java(介面與繼承)》這篇文章才恍然大悟,原來包裝機我一開始理解就有誤,所謂的多重繼承是指介面繼承類,而不是類繼承介面。
文章中提到了OO的抽象,正如文章中的那句話——"抽象就是抽去像的部分",很形象,以前想到抽象總是認為很難理解,抽象嘛,哈哈,現在就很容易理解了,這也正是介面和抽象類所要做的事情。
文章中還有很多觀點也讓我受益匪淺,羅列如下:
OO的精髓,我以為,是對對象的抽象。
介面的作用,一言以蔽之,就是標志類的類別(type of class)。把不同類型的類歸於不同的介面,可以更好的管理他們。
繼承的意義也在於抽象,而不是代碼重用。
看完這篇文章,現在基本上理解介面、抽象類、繼承該如何應用了。
原文如下:
澄清Java(介面與繼承) 計算機學院研二的兄弟與我討論Java,一見面,幾個問題全是關於介面,介面有什麼用?為什麼要用介面?什麼時候該使用介面?很慶幸他們不是問我 Java如何連接SQL Server,或者是如何開發J2EE應用,這類問題有殺傷力,避之則吉。今年計算機學院本科有個畢業設計課題是做J2ME,選這個題目的學生在5月末都還在苦著臉研究java.util.*這個包,這個這個……唉。
大多數人認為,介面的意義在於頂替多重繼承。眾所周知Java沒有c++那樣多重繼承的機制,但是卻能夠實作多個介面。其實這樣做是很牽強的,介面和繼承是完全不同的東西,介面沒有能力代替多重繼承,也沒有這個義務。介面的作用,一言以蔽之,就是標志類的類別(type of class)。把不同類型的類歸於不同的介面,可以更好的管理他們。OO的精髓,我以為,是對對象的抽象,最能體現這一點的就是介面。為什麼我們討論設計模式都只針對具備了抽象能力的語言(比如c++、java、c#等),就是因為設計模式所研究的,實際上就是如何合理的去抽象。(cowboy的名言是「抽象就是抽去像的部分」,看似調侃,實乃至理)。
設計模式中最基礎的是工廠模式(Factory),在我最近的一個很簡單的應用中,我想盡量的讓我的程序能夠在多個資料庫間移植,當然,這涉及很多問題,單是如何兼容不同DBMS的SQL就讓人頭痛。我們不妨先把問題簡單化,只考慮如何連接不同的資料庫。
假設我有很多個類,分別是Mysql.java、SQLServer.java、Oracle.java、 DB2.java,他們分別連接不同的資料庫,統一返回一個Connection對象,並且都有一個close方法,用於關閉連接。只需要針對你的 DBMS,選擇不同的類,就可以用了,但是我的用戶他會使用什麼資料庫?我不知道,我希望的是盡量少的修改代碼,就能滿足他的需要。我可以抽象如下介面:
package org.bromon.test;
public interface DB
{
java.sql.Connection openDB(String url,String user,String password);
void close();
}
這個介面只定義兩個方法,沒有任何有實際意義的代碼,具體的代碼由實作這個介面的類來給出,比如Mysql.java:
Package org.bromon.test;
import java.sql.*;
public class Mysql implements DB
{
private String url=」jdbc:mysql:localhost:3306/test」;
private String user=」root」;
private String password=」」;
private Connection conn;
public Connection openDB(url,user,password)
{
//連接資料庫的代碼
}
public void close()
{
//關閉資料庫
}
}
類似的當然還有Oracle.java等等,介面DB給這些類歸了個類,在應用程序中我們這樣定義對象:
org.bromon.test.DB myDB;
使用myDB來操作資料庫,就可以不用管實際上我所使用的是哪個類,這就是所謂的「開-閉」原則。但是問題在於介面是不能實例化的,myDB= new DB(),這樣的代碼是絕對錯誤的,我們只能myDB=new Mysql()或者myDB=new Oracle()。麻煩了,我還是需要指定具體實例化的是哪個類,用了介面跟沒用一樣。所以我們需要一個工廠:
package org.bromon.test;
public class DBFactory
{
public static DB Connection getConn()
{
Return(new Mysql());
}
}
所以實例化的代碼變成:myDB=DBFactory.getConn();
這就是23種模式中最基礎的普通工廠 (Factory),工廠類負責具體實例化哪個類,而其他的程序邏輯都是針對DB這個介面進行操作,這就是「針對介面編程」。責任都被推卸給工廠類了,當然你也可以繼續定義工廠介面,繼續把責任上拋,這就演變成抽象工廠(Abstract Factory)。
整個過程中介面不負責任何具體操作,其他的程序要連接資料庫的話,只需要構造一個DB對象就OK,而不管工廠類如何變化。這就是介面的意義----抽象。
繼承的概念不用多說,很好理解。為什麼要繼承呢?因為你想重用代碼?這絕對不是理由,繼承的意義也在於抽象,而不是代碼重用。如果對象A有一個 run()方法,對象B也想有這個方法,所以有人就Class B extends A。這是不經大腦的做法。如果在B中實例化一個A,調用A的Run()方法,是不是可以達到同樣的目的?如下:
Class B
{
A a=new A();
a.run();
}
這就是利用類的聚合來重用代碼,是委派模式的雛形,是GoF一貫倡導的做法。
那麼繼承的意義何在?其實這是歷史原因造成的,最開始的OO語言只有繼承,沒有介面,所以只能以繼承來實現抽象,請一定注意,繼承的本意在於抽象,而非代碼重用(雖然繼承也有這個作用),這是很多Java爛書最嚴重的錯誤之一,它們所造成的陰影,我至今還沒有完全擺脫,壞書害人啊,尤其是入門類的,流毒太大。什麼時候應該使用繼承?只在抽象類中使用,其他情況下盡量不使用。抽象類也是不能實例化的,它僅僅提供一個模版而已,這就很能說明問題。
軟體開發的萬惡之源,一是重復代碼而不是重用代碼,二是爛用繼承,尤以c++程序員為甚。Java中取締多重繼承,目的就是制止爛用繼承,實是非常明智的做法,不過很多人都不理解。Java能夠更好的體現設計,這是讓我入迷的原因之一