角色在資料庫中的表示
class permission: # 許可權常量
follow = 0x01 # 關注使用者
write_articles = 0x04 # 寫文章
moderate_comments =0x08 # 管理他們發表的評價
administer = 0x80 # 管理員許可權
class role(db.model):
__tablename__ = 'roles'
id = db.column(db.integer, primary_key=true)
name = db.column(db.string(64), unique=true)
default = db.column(db.boolean, default=false, index=true)
permissions = db.column(db.integer)
users = db.relationship('user', backref='role')
def __init__(self, **kwargs): # 初始化角色許可權
super(role, self).__init__(**kwargs)
if self.permissions is none:
self.permissions = 0
@staticmethod # # 靜態方法無需例項化
def insert_roles():
roles =
default_role = 'user'
for r in roles: # 通過角色查詢現有角色去設定許可權,方便修改許可權和新增新角色
role = role.query.filter_by(name = r).first()
if role is none: # 當資料庫中沒有某個角色時建立個新角色
role = role(name=r)
role.reset_permissions()
for perm in roles[r]:
role.add_permission(perm)
role.default = (role.name == default_role) # 判斷是不是預設使用者
db.session.add(role)
db.session.commit()
def has_permission(self, perm): # 判斷當前角色是否已經有該許可權
return self.permissions & perm == perm
def add_permission(self, perm): # 角色新增許可權
if not self.has_permission(perm):
self.permissions += perm
def remove_permiss(self, perm): # 角色刪除許可權
if self.has_permission(perm):
self.permissions -= perm
def reset_permissions(self): # 重置角色
self.permissions = 0
def __repr__(self):
return '' % self.name
使用者賦予角色和驗證
class user(usermixin, db.model):
__tablename__ = 'users'
id = db.column(db.integer, primary_key=true)
email = db.column(db.string(64), unique=true, index=true)
username = db.column(db.string(64), unique=true, index=true)
password_hash = db.column(db.string(128))
confirmed = db.column(db.boolean, default=false)
role_id = db.column(db.integer, db.foreignkey('roles.id'))
def __init__(self, **kwargs): # 初始化使用者角色
super(user, self).__init__(**kwargs)
if self.role is none:
self.role = role.query.filter_by(name='administrator').first()
else: # 否則都是預設使用者
self.role = role.query.filter_by(default=true).first()
def can(self, permissions): # 檢測是否含有指定許可權
return self.role is none and (self.role.permissions & permissions) == permissions
def is_administrator(self): # 檢測是否含有所有許可權,即是否是管理員
return self.can(permission.administer)
class anonymoususer(anonymoususermixin): # 重寫匿名使用者,為保持與其他使用者一致性
def can(self, permissions):
return false
def is_administrator(self):
return false
login_manager.anonymous_user = anonymoususer
檢查使用者許可權的自定義裝飾器
from functools import wraps
from flask import abort
from flask_login import current_user
from .models import permission
def permission_required(permission):
def decorator(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if not current_user.can(permission):
abort(403)
return f(*args, **kwargs)
return decorated_function
return decorator
def admin_required(f):
return permission_required(permission.administer)(f)
自定義裝飾器的使用
@main.route('/moderate')
@login_required
@permission_required(permission.moderate_comments)
def moderate_test():
return "just for test!"
Oracle 角色許可權 建立使用者 賦權
1 許可權 使用者 角色許可權 sysdba 可以改變字符集 建立刪除資料庫 登入之後使用者是sys 可以啟動和關閉資料庫 sysoper 不可改變字符集 不能創 刪資料庫 登陸之後使用者是public 可以啟動和關閉資料庫 dba 只有在啟動資料庫後才能執行各種管理工作。登入oracle資料庫有三...
使用者 角色與許可權
經常整理 反思,才能進步。一位偉大的哲學家 還原真相 事情是這樣的,我在實習的時候,我的實習導師安排我做系統後台管理中的 使用者資訊管理 角色管理 許可權管理 三個進行分析,並讓我說了說我的想法。初生牛犢不怕虎,稍微思索了下,就開始講。在講到角色管理和許可權管理的時候,我就說可以將角色管理和許可權管...
SQL server 建立角色,分配使用者 設定許可權
建立角色 exec sp addrole extenduserlist 給角色新增許可權 grant select on ot user to extenduserlist 切換到另乙個資料庫 grant select on hr employee to extenduserlist 增加角色crm...