大家在做项目的时候遇到权限设置的问题,一般是去怎么实现的啊?举个例子:   现在要做一个销售指派的项目,这个系统使用者是  项目主管,客户经理 /意思是这个系统 项目主管,客户经理      
             
             都能登入,
             客户经理和项目主管都有权创建,修改销售项目,
             只有项目主管有权进行指派旗下的客户经理,也就是说只有项目主管能进行指派操作             请问各位大侠如何实现这个功能的,说下思路吧--------------------------------------------------------------------------------------------------------------
小弟是这样想的  早DB里设置权限1是项目主管,0是客户经理    执行操作前进行判断  不过想想只是权宜之计= =  有什么更好的办法哇,求赐教!!!
小弟菜,勿喷。。谢谢

解决方案 »

  1.   

    首先展现界面上,判断角色显示对应目录树,按钮等内容
    其次,在持久层和db交互时,插入一层,用于角色权限判断每个角色有自己的角色类型ID,每种ID有允许操作的项,可以配置到配置文件,或者直接存到库里一张表
    当用户操作提过来时,拿到其对应角色ID,判断是否有权限进行此操作
      

  2.   

    可以把权限数据存放在数据库的一张表里
    页面到后台提取数据时写一个验证用的java来判断是不是有权限存取
      

  3.   

    权限控制我一般是使用二进制来表示 (计算方法:1 << x),每个功能用下面的数字来表示一个权限,如果有多个功能使用 “或” 操作得到权限值,查看是否有某项权限使用当前用户的权限值与此功能权限值 “与” 操作,如果不为零有则此权限,为零则没有。
    一般情况下可以使用32位整数表示32个权限,64位整数表示64个权限,如果实在不够,那可以使用字符串来表示扩大范围。1
    10
    100
    1000
    10000
    100000
    1000000
    10000000
    100000000
    1000000000
      

  4.   

    给一个Qt中使用的权限管理类参考一下
    #ifndef PERMISSIONMANAGER_H
    #define PERMISSIONMANAGER_H#include <QList>
    #include <QString>
    #include <memory>class Admin;
    class QWidget;
    class Permission;class Permission {
    public:
        Permission(int value, const QString &description, QWidget *sourceWidget);
        int     getValue() const;
        QString getDescription() const;
        QWidget* getSourceWidget() const;private:
        int value;
        QString description;
        QWidget *sourceWidget;
    };class PermissionManager {
    public:
        ~PermissionManager();    static bool canAccess(const Admin &admin, const QWidget *widget);
        static bool hasPermission(int permission, int cell); // permission has permission cell
        static int createPermission(QList<int> permissionCells);
        static void registerPermission(Permission *item);
        static QList<Permission *> getPermissions();
        static QString getPermissionDescription(int permission);private:
        QList<Permission *> permissions;    PermissionManager();
        PermissionManager(const PermissionManager &);
        PermissionManager& operator=(const PermissionManager &);    static PermissionManager& getInstance();
        friend class std::auto_ptr<PermissionManager>;
        static std::auto_ptr<PermissionManager> instance;
    };#endif // PERMISSIONMANAGER_H
    #include "PermissionManager.h"
    #include <QtGui/QWidget>
    #include <QVariant>
    #include <QDebug>#include "../domain/Admin.h"
    #include "../util/CommonUtil.h"#include <QtCore>Permission::Permission(int value, const QString &description, QWidget *sourceWidget) {
        this->value = (1 << value);
        this->description = description;
        this->sourceWidget = sourceWidget;    this->sourceWidget->setProperty("permission", value);
    }int Permission::getValue() const {
        return value;
    }QString Permission::getDescription() const {
        return description;
    }QWidget* Permission::getSourceWidget() const {
        return sourceWidget;
    }//  PermissionManager的实现
    std::auto_ptr<PermissionManager> PermissionManager::instance;PermissionManager::PermissionManager() {
    }PermissionManager::~PermissionManager() {
        CommonUtil::deleteAll(&permissions);
    }PermissionManager& PermissionManager::getInstance() {
        if (instance.get() == 0) {
            instance.reset(new PermissionManager());
        }    return *(instance.get());
    }void PermissionManager::registerPermission(Permission *item) {
        item->getSourceWidget()->setProperty("permission", item->getValue());
        getInstance().permissions.append(item);
    }bool PermissionManager::canAccess(const Admin &admin, const QWidget *widget) {
        int currentPermission = admin.permission;
        int requiredPermission = widget->property("permission").toInt();    if (0 == requiredPermission || hasPermission(currentPermission, requiredPermission)) {
            return true;
        } else {
            qDebug() << "无权访问: " << widget->objectName();
            return false;
    //        return true;
        }
    }bool PermissionManager::hasPermission(int permission, int cell) {
        return (permission & cell) != 0;
    }int PermissionManager::createPermission(QList<int> permissions) {
        int permission = 0;
        foreach (int p, permissions) {
            permission |= p;
        }    return permission;
    }QList<Permission *> PermissionManager::getPermissions() {
        return getInstance().permissions;
    }QString PermissionManager::getPermissionDescription(int permission) {
        if (permission <= 0) { return "没有权限"; }    QString str;    foreach (Permission *p, getInstance().permissions) {
            if (hasPermission(permission, p->getValue())) {
                str += p->getDescription() + ", ";
            }
        }    return str.replace(QRegExp(", $"), "");
    }