學習隨筆 Flask使用者角色與許可權

2021-08-19 23:07:34 字數 3744 閱讀 2254

角色在資料庫中的表示

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...