zoukankan      html  css  js  c++  java
  • 权限控制的一个思路

    数据库表结构

    CREATE TABLE `NewTable` (
        `id`  int(11) NOT NULL AUTO_INCREMENT,
        `title`  varchar(255) NOT NULL,
        `menu_id`  int(11) NOT NULL,
        `module`  varchar(50) NOT NULL,
        `class`  varchar(50) NOT NULL,
        `method`  varchar(50) NOT NULLPRIMARY KEY (`id`)
    );

    假定我们使用了MVC的结构,并通过url访问对应的模块及类和函数。

    表中第一行表示一个操作,title表示操作名,menu_id表示属于哪一个菜单选项,module表示模块名(没有可以略过),class表示类名,method表示函数名

    此外我们还需要一个用户组的表,大致如下:

    其中access_list中保存的当前用户组所拥有的权限ID(对应上个权限表中的ID)

    当然我们还需要一个用户表来对应用户组表

    group_id表示的第用户所对应的用户组

    当我们访问一个url的时候,比如:

    http://testApp.test.com/index.php/module/testModule/testClass/testAction

    通过路由分析,我们得到相应的数据:

    模块->testModule

    类->testClass

    函数->testAction

    通过三个参数,我们查找权限表中的数据,得到一个唯一的id值。

    然后对比用户组中access_list中的数据,如果数据中包括有这个id,那么当前用户拥有当前操作的权限,反之没有权限。

    那么我们如何来控制菜单选项,当用户有权限时才显示呢?

    因为在权限表中的每个操作都对应有一个menu_id,即菜单选项。我们通过查找当前用户所属于的用户组信息,得到他所拥有的权限操作ID,再通过ID取得他所属于的菜单选项,这样就得到了当前用户所拥有的菜单权限。

  • 相关阅读:
    全局临时表的应用 Timothy
    结合windows服务的Socket聊天室 Timothy
    阿拉伯数字转换成金额大写金额(包括小数) Timothy
    回文字符串和栈 Timothy
    SQL 读取不连续的第30到40之间的数据 Timothy
    C#中as和is关键字 Timothy
    嵌套事务和事务保存点的错误处理 Timothy
    隐式事务 Timothy
    float,double和decimal类型 Timothy
    string 值类型还是引用类型 Timothy
  • 原文地址:https://www.cnblogs.com/wkpilu/p/php_acl.html
Copyright © 2011-2022 走看看