分享一套基于WEB的ERP級專業權限管理繫統

一直以来权限都是比较难以管理,让人头疼的事,现实如此,WEB应用更是如此,由其是让WEB能适应现实的权限变化更是难上加难!

 

但是今天,我们已经不再需要为WEB权限分配置所困扰了,下面我要向大家介绍一套非常优秀的PHP权限管理系统——HooPower

 

认识它可能是一种缘份,那时正逢域名大减价,通过搜索域米找到的HooPowerHooPower.com),单看名字就有一种说不出来的魅力(谐音:琥珀)。

 

HooPower出道不久,看域名注册日期就知道了:2006年底,而且Google和百度都没有收录,也正因为如此吧,Hoopower网上为了推广免费提供测试版下载。

 

到底是一套什么样的软件呢,下载试试便知!通过一番测试之后,我惊喜的发现我现在遇到的权限管理问题,在Hoopower里面都能找到完美的解决方案,而且处理起来非常简单!

 

惊喜之余,我也不敢独享呀,现将体会与大家一起分享!

 

基本情况

1、数据库:集成ADODB,理论上ADODB几乎支持目前流行的所有数据库,但是HooPower只提供MssqlMysql的安装。安装的时候可以自由选择安装的数据库类型,为了区别其它表,支持使用前缀,安装完成一共16个表。前些日子我曾下载过phpgacl,也是一个权限管理系统,但是安装后的表都有二十六个-_-!

 

2、集成XAJAX,使得前台框架显示更美观,由其是它的Windows风格模板,让用户操作整个系统就像是用本地的应用软件一样方便!

 

3、框架模板可扩展,模板使用的是PHPLIBTemplate。系统默认已提供了二种风格的模板,WEB风格和Windows风格。当然,如果你不满意,还可以自己定义风格,定义模板完全自由。

 

4、支持简体中文,繁体中文和英文三个版本。

 

权限关系

 

权限:分为三种,页面权限(基本权限:超用户、浏览、增加、修改、删除),页面附加权,全局权限。

 

角色:是一组权限的集合,一对多的关系

 

工作组:是一组角色的集合,一对多的关系,支持为工作组附加权限

 

用户:用户是工作组的成员,一对多的关系,支持为用户附加权限

 

特点(引用官方的说明)

 

1、支持全局或页面权限;页面权限可细分到页面上的某个特定属性(页面附加值)

2、支持由SQL语句生成的动态权限(我还不清楚怎么使用,等学会了再说);支持限下放;支持用户配置

2、设计比较合理,功能设计和权限配置实现分离,程序员设计功能,用户分配权限(通常为组长分配其下的组员权限)

3、完全面向对象,完全功能封装,简单的类扩展,即可实现权限分配

4、支持组长以组员身份登录,支持组长登录后在各组员间自由跳转

5、自带登陆框架,提供系统管理,日志,以及在用户在线交流

 

 

一个功能其实就一个组页面,在需要新功能的时候,首先必须新建一个菜单(页面)项,而且要为这页面分配权限。默认是不对任何人开放的。

菜单就是将功能按一定的顺序排放,在视觉上起到功能分组的做用。

 

举个例子来说,我新建了一个功能菜单,并分配给管理员所有权限

 

1、以管理员身份登陆

2、在菜单管理里面点新建菜单

3、选择文件的网址或输入网址

4、选择绑定到角色,将管理员角色全部选中(表示此页给管理员全部权限)

5、提交

6、编辑PHP文件,输入以下内容

<?

require('../admin.inc.php'); //根据你的目录而有所改变

class myTest extends admin {

       function disp(){

              echo "Hi Power!";

       }

}

$main = new myTest();

$main -> Main();

?>

 

OK!就这样,看起来是不是有点像Java,是的,HooPower是全完面象对象的。

文件就这么简单,程序员只需要实现功能就行了,权限分配由系统来完成。你可以通用权限公配指定让哪些用户浏览,哪些用户不可以浏览。

 

当然它的功能远不于此

比如我们读取一个表,然后用户进行修改和删除操作!

<?

require('../admin.inc.php'); //根据你的目录而有所改变

require('mytable.php');           //我的表操作类

class myTest extends admin {

       var $tab = null;

       function __construct(){

              parent::__construct();

              $this -> tab = new mytable();

       }

       function disp(){

              $rs = $this -> tab -> getRow(10);//得到表中前10行记录

              while($rrs = $rs -> FetchRow($rs)){

                     echo 'id:'.$rrs['id'].' testname:'.$rrs['testname'].

 

                     //得到修改字符串,如果没有权限修改,得不到修改字符串,或者得到的是不可点击的按钮

                     $this -> getUpdStr($rrs['userid'],$rrs['id']).' '.

 

                     //得到删除字符串,如果没有权限删除,得不到删除字符串,或者得到的是不可点击的按钮

                     $this -> getDelStr($rrs['userid'],$rrs['id']).

                     '<br>';

              }

 

              //得到增加字符串,如果没有权限得不到增加字符,或者得到的是不可点击的按钮

              echo $this -> getAddStr();  

       }

       function goDelete(){

              $this -> tab -> del($_GET['delid']+1);

              $this -> disp();

       }

       function goAppend(){

              $this -> tab -> app($_POST);

              $this -> disp();

       }

       function goModify(){

              $this -> tab -> mod($_POST);

              $this -> disp();

       }

       function goDispAppend(){

              $this -> goDispModify();

       }

       function goDispModify(){

              if( $this -> isModify ){

                     $this -> tab -> disp($_GET['updid']);

              }else{

                     $this -> tab -> disp();

              }

       }

}

$main = new myTest();

$main -> Main();

?>

 

OK,一个不太漂亮但是功能很全的界面算是已经完成了:),如是你想界面更好看,去修改disp方法,和 mytable 类的 disp 方法

你可能会说,这里面没有权限管理呀,是的,这就是它的强大之外,你几乎看不到有权限处理的部分,这一切都由HooPower来完成。

做为程序员的你,只需要把各模块的代码写完善就OK啦。不过有一点就是,就是dispgoDelete等等这些函数名你不能改变,这是HooPower的一个小小的约定,但是你可以增加参数:)关于admin类的API可以参见官方文档。

 

例三:我们新建一个页面,这个页面有一个下接菜单,是用来选择国家,下面显示的是当前选择的国家下的销售情况

国家的下接菜单,是根据当前用户可以浏览的国家得出的,默认显示的国家是有用户配置得出来的。

<?

require('../admin.inc.php'); //根据你的目录而有所改变

require('mytable.php');           //我的表操作类

class myTest extends admin {

       var $tab = null;

       function __construct(){

              parent::__construct();

              $this -> tab = new mytable();

       }

       function disp(){

              //得到用户可以浏览的国家

              $countrys = $this -> getAttach('countryList');

 

              //得到用户配置的默认国家

              $defaultc = $this -> getValue('defaultCountry');

 

              $sql = 'select * from country where countryid in('.implode(',',$countrys).')';

 

              $rs = $this -> tab -> getSqlData($sql);

 

              echo '<select>';

              while($rrs = $rs -> FetchRow($rs)){

                     echo '<option value='.$rrs['countryid'].

                            ($rrs['countryid']==$defaultc?' selected':'').

                     '>'.$rrs['countryname'].'</option>';

              }

              echo '</select>';

             

              $sql = 'select * from sale where countryid = '.$defaultc;

              ...

              //

              // other code ....

              //

       }

       function goDelete(){..}

       function goAppend(){..}

       function goModify(){..}

       function goDispAppend(){..}

       function goDispModify(){..}

}

$main = new myTest();

$main -> Main();

?>

 

提醒几点让大家注意一下:

 

用户权限分配,以及组权限分配

这里要特别说明的是,在用户权限配置页面里有一个超级开关:允许向下赋权?属于页面附加权,如果组长有此页的浏览、修改以及以许向下赋权的权限后,组长可以给组内任何人赋予他拥用的权限。这是一个很有意思的权限,不过随意赋予用户此权限可能会引起权限混乱。另外,如果组长拥有此页的浏览、修改权,也可以拒绝组内任何人拥有组长的某个权限,即使用户是属于多个组,而且用户另外组也有此权限。

 

解决权限分歧

常常会有这种情况:

  页面P(销售浏览)、

  P的附加权A(默认显示浏览的国家):类型为单选值(1:美,2:英,3:加)、

  G1(美国销售组)、

  G2(英国销售组)、

  用户U(小丽)

 

G1:P A = 1 (G1P页面的A附加权的值为1)

G2:P A = 2 (G2P页面的A附加权的值为2)

U = G1,G2  (用户加入了两个组)

 

那么 U:P A = 1,2  (用户U具用P页面A附加权的两个值,而这违反了P页面A附加权的规定)

 

默认情况下,程序会随机在12之间取一个值,同时也会在“用户配置”里面多出一项重复权限,可以让用户自己设置为1还是为2

当用户设置了之后,程序将不再随机取值,而是使用用户配置值了。配置权限不等于放弃权限,只要权限存在,用户仍可通过“用户配置”来选择权限

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值