forked from treehouse/mastodon
Add customizable user roles (#18641)
* Add customizable user roles * Various fixes and improvements * Add migration for old settings and fix tootctl role managementrebase/4.0.0rc1
parent
1b4054256f
commit
44b2ee3485
187 changed files with 1952 additions and 1039 deletions
@ -1,20 +0,0 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
module Admin |
||||
class SubscriptionsController < BaseController |
||||
def index |
||||
authorize :subscription, :index? |
||||
@subscriptions = ordered_subscriptions.page(requested_page) |
||||
end |
||||
|
||||
private |
||||
|
||||
def ordered_subscriptions |
||||
Subscription.order(id: :desc).includes(:account) |
||||
end |
||||
|
||||
def requested_page |
||||
params[:page].to_i |
||||
end |
||||
end |
||||
end |
@ -0,0 +1,33 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
module Admin |
||||
class Users::RolesController < BaseController |
||||
before_action :set_user |
||||
|
||||
def show |
||||
authorize @user, :change_role? |
||||
end |
||||
|
||||
def update |
||||
authorize @user, :change_role? |
||||
|
||||
@user.current_account = current_account |
||||
|
||||
if @user.update(resource_params) |
||||
redirect_to admin_account_path(@user.account_id), notice: I18n.t('admin.accounts.change_role.changed_msg') |
||||
else |
||||
render :show |
||||
end |
||||
end |
||||
|
||||
private |
||||
|
||||
def set_user |
||||
@user = User.find(params[:user_id]) |
||||
end |
||||
|
||||
def resource_params |
||||
params.require(:user).permit(:role_id) |
||||
end |
||||
end |
||||
end |
@ -1,7 +1,7 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
module Admin |
||||
class TwoFactorAuthenticationsController < BaseController |
||||
class Users::TwoFactorAuthenticationsController < BaseController |
||||
before_action :set_target_user |
||||
|
||||
def destroy |
@ -1,17 +1,19 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
class Api::V1::Admin::Trends::LinksController < Api::BaseController |
||||
class Api::V1::Admin::Trends::LinksController < Api::V1::Trends::LinksController |
||||
before_action -> { authorize_if_got_token! :'admin:read' } |
||||
before_action :require_staff! |
||||
before_action :set_links |
||||
|
||||
def index |
||||
render json: @links, each_serializer: REST::Trends::LinkSerializer |
||||
end |
||||
|
||||
private |
||||
|
||||
def set_links |
||||
@links = Trends.links.query.limit(limit_param(10)) |
||||
def enabled? |
||||
super || current_user&.can?(:manage_taxonomies) |
||||
end |
||||
|
||||
def links_from_trends |
||||
if current_user&.can?(:manage_taxonomies) |
||||
Trends.links.query |
||||
else |
||||
super |
||||
end |
||||
end |
||||
end |
||||
|
@ -1,17 +1,19 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
class Api::V1::Admin::Trends::StatusesController < Api::BaseController |
||||
class Api::V1::Admin::Trends::StatusesController < Api::V1::Trends::StatusesController |
||||
before_action -> { authorize_if_got_token! :'admin:read' } |
||||
before_action :require_staff! |
||||
before_action :set_statuses |
||||
|
||||
def index |
||||
render json: @statuses, each_serializer: REST::StatusSerializer |
||||
end |
||||
|
||||
private |
||||
|
||||
def set_statuses |
||||
@statuses = cache_collection(Trends.statuses.query.limit(limit_param(DEFAULT_STATUSES_LIMIT)), Status) |
||||
def enabled? |
||||
super || current_user&.can?(:manage_taxonomies) |
||||
end |
||||
|
||||
def statuses_from_trends |
||||
if current_user&.can?(:manage_taxonomies) |
||||
Trends.statuses.query |
||||
else |
||||
super |
||||
end |
||||
end |
||||
end |
||||
|
@ -1,17 +1,19 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
class Api::V1::Admin::Trends::TagsController < Api::BaseController |
||||
class Api::V1::Admin::Trends::TagsController < Api::V1::Trends::TagsController |
||||
before_action -> { authorize_if_got_token! :'admin:read' } |
||||
before_action :require_staff! |
||||
before_action :set_tags |
||||
|
||||
def index |
||||
render json: @tags, each_serializer: REST::Admin::TagSerializer |
||||
end |
||||
|
||||
private |
||||
|
||||
def set_tags |
||||
@tags = Trends.tags.query.limit(limit_param(10)) |
||||
def enabled? |
||||
super || current_user&.can?(:manage_taxonomies) |
||||
end |
||||
|
||||
def tags_from_trends |
||||
if current_user&.can?(:manage_taxonomies) |
||||
Trends.tags.query |
||||
else |
||||
super |
||||
end |
||||
end |
||||
end |
||||
|
@ -0,0 +1,3 @@ |
||||
export const PERMISSION_INVITE_USERS = 0x0000000000010000; |
||||
export const PERMISSION_MANAGE_USERS = 0x0000000000000400; |
||||
export const PERMISSION_MANAGE_REPORTS = 0x0000000000000010; |