# 权限 Flask-REST-JSONAPI 提供了强大的权限系统支持。 例: ```python from flask import Flask from flask_rest_jsonapi import Api from your_project.permission import permission_manager app = Flask(__name__) api = Api() api.init_app(app) api.permission_manager(permission_manager) ``` 上例中,API会在每个方法方法前,检查权限。检查权限的方式就是依次调用permission_manager中的函数。 定义permission_manager必须符合下述规范: ``` python def permission_manager(view, view_args, view_kwargs, *args, **kwargs): """The function use to check permissions :param callable view: the view :param list view_args: view args :param dict view_kwargs: view kwargs :param list args: decorator args :param dict kwargs: decorator kwargs """ ``` >注: > >Flask-REST-JSONAPI利用装饰器has_permission,来为每个方法检查权限。我们能给装饰器提供args和kwargs,这样,我们就能在permission_manager中获取args和kwargs了。默认情况下,权限系统不会给装饰器,提供任何的args或kwargs。 当发生权限不足的情况,建议使用以下方式抛出异常。 ```python raise JsonApiException(, , title='Permission denied', status='403') ``` 我们能为某个资源禁用权限系统,或者,定制权限检查的方式,如下: ```python from flask_rest_jsonapi import ResourceList from your_project.extensions import api class PersonList(ResourceList): disable_permission = True @api.has_permission('custom_arg', custom_kwargs='custom_kwargs') def get(*args, **kwargs): return 'Hello world !' ``` > 警告: > > 如果我们要同时使用权限系统和oauth支持,比如在权限系统下,从oauth读取用户信息(requests.oauth.user)。我们必须先初始化oauth,再初始化权限系统,因为装饰器检查是串联执行的。 例: ```python from flask import Flask from flask_rest_jsonapi import Api from flask_oauthlib.provider import OAuth2Provider from your_project.permission import permission_manager app = Flask(__name__) oauth2 = OAuth2Provider() api = Api() api.init_app(app) api.permission_manager(permission_manager) # initialize permission system first api.oauth_manager(oauth2) # initialize oauth support second ```