大家在做项目的时候遇到权限设置的问题,一般是去怎么实现的啊?举个例子: 现在要做一个销售指派的项目,这个系统使用者是 项目主管,客户经理 /意思是这个系统 项目主管,客户经理
都能登入,
客户经理和项目主管都有权创建,修改销售项目,
只有项目主管有权进行指派旗下的客户经理,也就是说只有项目主管能进行指派操作 请问各位大侠如何实现这个功能的,说下思路吧--------------------------------------------------------------------------------------------------------------
小弟是这样想的 早DB里设置权限1是项目主管,0是客户经理 执行操作前进行判断 不过想想只是权宜之计= = 有什么更好的办法哇,求赐教!!!
小弟菜,勿喷。。谢谢
都能登入,
客户经理和项目主管都有权创建,修改销售项目,
只有项目主管有权进行指派旗下的客户经理,也就是说只有项目主管能进行指派操作 请问各位大侠如何实现这个功能的,说下思路吧--------------------------------------------------------------------------------------------------------------
小弟是这样想的 早DB里设置权限1是项目主管,0是客户经理 执行操作前进行判断 不过想想只是权宜之计= = 有什么更好的办法哇,求赐教!!!
小弟菜,勿喷。。谢谢
其次,在持久层和db交互时,插入一层,用于角色权限判断每个角色有自己的角色类型ID,每种ID有允许操作的项,可以配置到配置文件,或者直接存到库里一张表
当用户操作提过来时,拿到其对应角色ID,判断是否有权限进行此操作
页面到后台提取数据时写一个验证用的java来判断是不是有权限存取
一般情况下可以使用32位整数表示32个权限,64位整数表示64个权限,如果实在不够,那可以使用字符串来表示扩大范围。1
10
100
1000
10000
100000
1000000
10000000
100000000
1000000000
#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(", $"), "");
}